C# 如何将linq查询转换为动态查询?
我想创建linq查询,该查询应该足够动态,以获取特定类的所有属性,并为linq中的“where”和“select”构建表达式树 有一个域模型,它由布尔属性和数值属性组成。数值属性将用于范围 例如: 域模型C# 如何将linq查询转换为动态查询?,c#,entity-framework,linq,linq-to-entities,dynamic-programming,C#,Entity Framework,Linq,Linq To Entities,Dynamic Programming,我想创建linq查询,该查询应该足够动态,以获取特定类的所有属性,并为linq中的“where”和“select”构建表达式树 有一个域模型,它由布尔属性和数值属性组成。数值属性将用于范围 例如: 域模型 public class MakeMeReal { public bool isA { get; set; } public bool isB { get; set; } public int Type1 { get; set; }
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 dynamicInput)
{
SampleDbContext db=新的SampleDbContext();
var结果=从m到db.MakeMeReal
其中m.isB==dynamicInput.isB&&m.isA==dynamicInput.isA&&
m、 Type1>=dynamicInput.lowerRangeForTyp1和&m.Type1=dynamicInput.LowerRangeForType2和&m.Type1
我想构建一个查询,它将通过域模型,它将构建表达式树,它将在运行时使用'LinqDynamic'类作为输入参数,针对提供给它的输入运行
我有10多个布尔值和30个范围选择器,而且布尔值和范围选择器的数量根据项目要求不断变化,所以每次更改查询都很头疼。我希望它是动态的,这样它对任何变化都是不可知的
我读了一些关于和一些其他的链接,我不能在这里发布,因为缺乏信誉点
但是我不知道如何实现它,在查询中使用谓词可能会有所帮助。有一个NuGet软件包可以帮助您完成这项工作。文档将解释如何执行此操作。请参见在查询中使用谓词可能会有所帮助。有一个NuGet软件包可以帮助您完成这项工作。文档将解释如何执行此操作。看