我想创建linq查询,该查询应该足够动态以获取特定类的所有属性,并为linq中的“where”和“select”构建表达式树。
有一个域模型,它由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和其他一些由于缺乏声誉而无法在此发布的链接
但我不确定如何实现它