C# 如何使用ASP/MVC实体框架查询未知属性?
我有一个表单,用户在其中选择一个属性,该属性最终会在查询中使用。因为我不知道该属性是什么,所以我的查询必须“动态地”执行,所以我编写了以下代码,希望不必编写大量的if/else语句,因为MyType有大量的属性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.
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方法的上下文中,我才能保留我的值
在这一点上,我看到自己有两个选择
那么…我能做什么?我知道必须有一种方法来实现这一点,但我不知道如何实现。使用linqkit并将谓词传递给where子句。您仍然会有一堆if语句,但在末尾只有一个linq语句检查这些答案。