C# 如何使用ASP/MVC实体框架查询未知属性?

C# 如何使用ASP/MVC实体框架查询未知属性?,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我有一个表单,用户在其中选择一个属性,该属性最终会在查询中使用。因为我不知道该属性是什么,所以我的查询必须“动态地”执行,所以我编写了以下代码,希望不必编写大量的if/else语句,因为MyType有大量的属性 MyType content = null; foreach (var prop in typeof(MyType).GetProperties()) { if (userProperty == prop.Name) { content = db.

我有一个表单,用户在其中选择一个属性,该属性最终会在查询中使用。因为我不知道该属性是什么,所以我的查询必须“动态地”执行,所以我编写了以下代码,希望不必编写大量的if/else语句,因为MyType有大量的属性

MyType content = null;
foreach (var prop in typeof(MyType).GetProperties())
{
    if (userProperty == prop.Name)
    {    
        content = db.MyType.Where(mt =>
            mt.GetType().GetProperty(prop.Name)
            .GetValue(mt).ToString() == someOtherValue)
        .FirstOrDefault();
        break;
    }
}
导致

Exception thrown: 'System.NotSupportedException' in EntityFramework.SqlServer.dll
经过一点研究,我了解到这是因为实体框架不支持在其查询生成器方法中使用所有方法。好的,我想我只需要先将获取的属性值存储在一个变量中,然后将其插入Where查询中……但是我该怎么做呢?显然,我不能在Where方法中声明变量,但只有在Where方法的上下文中,我才能保留我的值

在这一点上,我看到自己有两个选择

  • 咬紧牙关,写一大堆(比如35条)if/else语句 里面有重复的代码
  • 从数据库中获取所有MyType内容 数据库作为一个列表,然后有自由
  • 选项一显然不吸引人,而选项二对我来说效率极低,因为数据库中有大量数据,我只需要一行数据


    那么…我能做什么?我知道必须有一种方法来实现这一点,但我不知道如何实现。

    使用linqkit并将谓词传递给where子句。您仍然会有一堆if语句,但在末尾只有一个linq语句检查这些答案。