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 クエリで my に置き換えたい

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 に答える