C# 如何通过变量&x27;访问LINQ;s值(没有LINQ到实体使用的反射)
有没有一种方法可以使用variables值动态访问LINQ属性,而无需在vanilla C#中进行反射?我相信有一些库可以在这方面提供帮助(例如),但如果可能的话,我希望避免依赖性。在pseudo中,功能如下:C# 如何通过变量&x27;访问LINQ;s值(没有LINQ到实体使用的反射),c#,.net,entity-framework,linq,dynamic,C#,.net,Entity Framework,Linq,Dynamic,有没有一种方法可以使用variables值动态访问LINQ属性,而无需在vanilla C#中进行反射?我相信有一些库可以在这方面提供帮助(例如),但如果可能的话,我希望避免依赖性。在pseudo中,功能如下: var temp = "PropertyName"; context.Table.Where(a => a.GetProperty(temp) > 5); 我最初尝试了一种解决方案,比如使用反射,当我使用常规LINQ测试它时,反射效果非常好。然而,它不适用于LINQtoEn
var temp = "PropertyName";
context.Table.Where(a => a.GetProperty(temp) > 5);
我最初尝试了一种解决方案,比如使用反射,当我使用常规LINQ测试它时,反射效果非常好。然而,它不适用于LINQtoEntity对象,因为EF无法将其编译成SQL。我还研究了表达式树,但这似乎不仅仅是属性访问功能(我的一些“Where”条件将动态生成)
如果有人对此有任何想法/例子,我将不胜感激 如果您不想使用
Expression
(这可能是正确的方法),也不想依赖System.Linq.Dynamic
(这是Expression
为您完成的),那么您可以走老路,因为您可能知道列名:
var query = context.Table.AsQueryable();
switch (temp) {
case "PropertyName1":
query = query.Where(a => a.PropertyName1 > 5);
break;
case "PropertyName2":
query = query.Where(a => a.PropertyName2 > 15);
break;
}
如果您不想使用
Expression
(这可能是正确的方法),也不想依赖System.Linq.Dynamic
(这是Expression
为您完成的),那么您可以走老路,因为您可能知道列名:
var query = context.Table.AsQueryable();
switch (temp) {
case "PropertyName1":
query = query.Where(a => a.PropertyName1 > 5);
break;
case "PropertyName2":
query = query.Where(a => a.PropertyName2 > 15);
break;
}
您应该使用
Expression
classes然后使用system.Linq.Dynamic可能是您最好的选择,除此之外,自定义SQL。请参阅:System.Linq.Dynamic是我最后使用的,您应该使用表达式类然后System.Linq.Dynamic可能是您最好的选择,除此之外,自定义SQL。看:System.Linq.Dynamic是我最后使用的,实际上我也会动态地获得名称,哈哈,但这会起作用,所以我正在标记它。我最终选择了System.Linq.Dynamic。事实上,我也会动态获取名称,哈哈,但这会起作用,所以我正在标记它。我最终选择了System.Linq.Dynamic。