1

我想创建linq查询,该查询应该足够动态以获取特定类的所有属性,并为linq中的'where'和'select'构建表达式树。如何将LINQ查询转换为动态查询?

有一个域模型由bool属性和数字属性组成。数字属性将用于范围。

例子:

域模型

public class MakeMeReal 
    { 
     public bool isA { get; set; } 
     public bool isB { get; set; } 

     public int Type1 { get; set; } 
     public double Type2 { get; set; } 

     public double Type3 { get; set; } 
     public string Type4 { get; set; } 

    } 

输入模型:

public class LinqDynamic 
    { 
     public bool isA { get; set; } 
     public bool isB { get; set; } 

     public int lowerRangeForTyp1 { get; set; } 
     public int UpperRangeForTyp1 { get; set; } 

     public double LowerRangeForType2 { get; set; } 
     public double UpperRangeForType2 { get; set; } 
    } 

简单的查询:

public void query(LinqDynamic dynamicInput) 
     { 
      SampleDbContext db = new SampleDbContext(); 

      var result = from m in db.MakeMeReal 
         where m.isB == dynamicInput.isB && m.isA == dynamicInput.isA && 
           m.Type1 >= dynamicInput.lowerRangeForTyp1 && m.Type1 < dynamicInput.UpperRangeForTyp1 && 
           m.Type2 >= dynamicInput.LowerRangeForType2 && m.Type1 < dynamicInput.UpperRangeForType2 

         select new { a = m.Type1, b = m.Type2, c = m.Type3, d = m.Type4 }; 

     } 

我想建立查询将经历域模型和我将构建表达式树,它将针对运行时使用'LinqDynamic'类作为输入参数提供的输入运行。

我有超过10个布尔值和30个范围选择器,布尔值和范围选择器的数量会根据项目需求不断变化,所以每次更改查询都会很头疼。我想使其动态的,因此,它会是不可知的任何变化

我读到https://msdn.microsoft.com/en-us/library/bb397951.aspx和我不能在这里发表由于缺乏信誉点一些其他环节

但我我不知道如何实现它

回答

0

什么可能有所帮助是在查询中使用谓词。有一个NuGet包可以帮助你做。文档将解释如何做到这一点。见LINQKit here