/ / Concatene um filtro de string em onde - c #, linq-to-sql

Concatene um filtro de string em que - c #, linq-to-sql

Eu quero concatenar minha seqüência de filtro na minha solicitação de Linq para SQL. É a primeira vez que sou novo em c # e 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;
}

Eu quero substituir esta string com o meu where na consulta Linq como esta

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

Respostas:

2 para resposta № 1

O que você está tentando fazer pode ser alcançado com o LINQ Where métodos:

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 });

0 para resposta № 2

Eu desencorajei a concatenação de string de uso para o linq, mas se você realmente precisa dele (e eu quero dizer cenários estranhos), você poderia tentar DynamicLinq

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


0 para resposta № 3

Você pode usar o seguinte:

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 };

O Linq pode ser composto dinamicamente dessa maneira. Se você fizer agora req.ToList(); sua consulta será executada. Devido a esse comportamento preguiçoso, você pode compor sua consulta em etapas distintas.