我想在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 };
答案 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
答案 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();
,您的查询将被执行。由于这种懒惰的行为,您可以在不同的步骤中撰写查询。