C# 如何将linq查询转换为动态查询?

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; }

我想创建linq查询,该查询应该足够动态,以获取特定类的所有属性,并为linq中的“where”和“select”构建表达式树

有一个域模型,它由布尔属性和数值属性组成。数值属性将用于范围

例如:

域模型

 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软件包可以帮助您完成这项工作。文档将解释如何执行此操作。看