在其中连接字符串过滤器

时间:2012-09-24 14:37:51

标签: c# linq-to-sql

我想在Linq-to-SQL请求中连接我的过滤字符串。这是我第一次使用c#和Linq。

string f = "where 1==1";
            if (!string.Equals(t, "0"))
            {
                f += " AND p.lId==" + a;           
            }
            if (!string.Equals(tc, "0"))
            {
                f += " AND p.tp.Id==" + b;
            }

我想在Linq查询中将此字符串替换为where,如此

var req = from p in db.Pt
                         +f+
                         select new { L= p.bt, Lg = p.Sl }; 

3 个答案:

答案 0 :(得分:2)

使用LINQ Where方法可以实现您的目标:

var req = db.Pt;

if (!string.Equals(t, "0"))
{
    req = req.Where(p => p.lId == a);
}

if (!string.Equals(tc, "0"))
{
    req = req.Where(p => p.tp.Id == b);
}

req = req.Select(p = >  new { L= p.bt, Lg = p.Sl });

答案 1 :(得分:0)

我不鼓励为linq使用字符串连接,但如果你确实需要它(我的意思是奇怪的情况),你可以尝试使用DynamicLinq

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

答案 2 :(得分:0)

您可以使用以下内容:

var query = from p in db.Pt
            select p;

if (!string.Equals(t, "0"))
{
  query = query.Where(p => p.lId== a);
}

if (!string.Equals(tc, "0"))
{
   query = query.Where(p => p.tp.Id== ba);
}

var req = from p in query
          select new { L= p.bt, Lg = p.Sl };

Linq可以这种方式动态组合。如果您现在执行req.ToList();,您的查询将被执行。由于这种懒惰的行为,您可以在不同的步骤中撰写查询。