2017-07-16 19 views
1

有没有一种方法可以在香草C#中使用变量值动态地访问LINQ属性?我相信有一些库可以在这方面提供帮助(如System.Linq.Dynamic),但如果可能的话,我想避免依赖。在伪,一些功能是这样的:如何通过变量的值访问LINQ(没有反映LINQ到实体的使用)

var temp = "PropertyName"; 
context.Table.Where(a => a.GetProperty(temp) > 5); 

我最初使用反射,它完美地工作,当我与普通LINQ测试它试图像this的解决方案。然而,它不适用于LINQ-to-Entity对象,因为EF无法将其编译为SQL。我也研究了表达式树,但这似乎并不仅仅只是属性访问能力(以及我的一些“Where”条件将被动态生成)的方式。

如果有人有任何想法/这方面的例子,我会很感激!

+2

你应该使用'Expression'类则 – Rahul

+0

System.Linq.Dynamic可能会是你最好的选择,除此之外,自定义的SQL。请参阅:https://msdn.microsoft.com/en-us/library/jj592907(v=vs.113).aspx –

+0

System.Linq.Dynamic是我所做的事情与 – mju516

回答

0

如果你不想使用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; 
} 
+0

事实上我会得到的名称动态以及哈哈,但这将工作,所以我标记它。我结束了与System.Linq.Dynamic。 – mju516