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 № 1O 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
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.