执行String作为Linq

时间:2013-04-09 12:50:36

标签: linq c#-4.0 dynamic

有没有办法可以将String作为Linq执行? 我有一个dynamci查询,为此我必须将Linq表达式转换为字符串,然后附加有一些条件查询的字符串bulider。 所以整个表达式现在都是字符串。 现在如何执行此字符串? 我应该再次将此字符串转换为Linq吗? 怎么办?

 StringBuilder sb = new StringBuilder();
 if (InstId != String.Empty)
 {
     sb.Append("application.Id ==" + InstId);
 }
 if (BId != String.Empty)
 {
     sb.Append("&& application.BId ==" + BId);
 }
 if (CId != String.Empty)
 {
     sb.Append("&& application.CId ==" + CId);
 }

String query=("from tables in context.Application .........
........join .........."+sb);

var q1=query;

现在如何执行这个q1?

2 个答案:

答案 0 :(得分:2)

您不需要StringBuilder

var query = context.Application;

if (InstId != String.Empty)
{
    query = query.Where(a => a.Id == InstId);
}
if (BId != String.Empty)
{
    query = query.Where(a => a.BId == BId);
}
if (CId != String.Empty)
{
    query = query.Where(a => a.CId == CId);
}

var items = query.Join(/* your join here */).ToList();

查询不会被执行,直到ToList或其他类似的方法被调用,因此您可以根据需要追加Where()

答案 1 :(得分:2)

虽然在很多情况下我并不认为这是一个很好的做法,但有一个Dynamic LINQ库允许你这样做。

一般情况下,如果可能的话,我建议您使用可以进行更强类型检查的内容,例如@MarcinJuraszak的响应或类似PredicateBuilder类的内容。