1

我想在我的 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;
            }

我想在这样where的 Linq 查询中用我的替换这个字符串

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

3 回答 3

2

您尝试做的事情可以通过 LINQWhere方法实现:

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 });
于 2012-09-24T14:43:21.020 回答
0

我不鼓励对 linq 使用字符串连接,但如果你真的需要它(我的意思是奇怪的场景),你可以尝试 DynamicLinq

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

于 2012-09-24T14:42:28.633 回答
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();你的查询将被执行。由于这种惰性行为,您可以按不同的步骤编写查询。

于 2012-09-24T14:44:34.700 回答