3

有没有办法可以将字符串作为 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?

4

2 回答 2

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()

于 2013-04-09T12:54:22.943 回答
2

虽然我不一定认为在很多情况下这是一个很好的做法,但有一个动态 LINQ库可以让您做到这一点。

一般来说,如果可能的话,我建议使用可以进行更严格类型检查的东西,例如@MarcinJuraszak的响应或类似PredicateBuilder类的东西。

于 2013-04-09T12:58:43.853 回答