如何在LINQ查询中放置条件WHERE子句

问题描述 投票:5回答:2

我想在condition为真的下面做,我想执行WHERE否则没有。

var condition = true;

var mast = new List<Master>
{
    new Master{Id = 2, Prop1 = "Default", Prop2 = "Data", Prop3 = 11},
    new Master{Id = 3, Prop1 = "Some", Prop2 = "TestData", Prop3 = 11},
    new Master{Id = 4, Prop1 = "Some", Prop2 = "MoreData", Prop3 = 11},
};

var g = mast.Where(w=> condition ? (x => x.Prop1.ToLower() != "default" || x.Prop2.ToLower() != "data") : true = true).ToList();

上面的代码给我错误,

无法确定条件表达式的类型,因为'lambda expression'和'bool'之间没有隐式转换

c# linq lambda
2个回答
4
投票

只需将条件移动到lambda:

var g = mast.Where(w => (condition
    ? (w.Prop1.ToLower() != "default" || w.Prop2.ToLower() != "data")
    : true)
).ToList();

2
投票

您只需使用1个lambda变量x=>就可以使用正确的lambda表示法修复原始语句

或者您可以检查条件是否为真或其他条件是否为真

var result = mast.Where(x=> !condition || (x.Prop1.ToLower() != "default" || x.Prop2.ToLower() != "data");

或者您可以使用if语句

IEnumerable<Master> result;
if (condition)
   result = mast.Where(x => x.Prop1.ToLower() != "default" || x.Prop2.ToLower() != "data");
else
   result = mast;
© www.soinside.com 2019 - 2024. All rights reserved.