Linq表达式中的条件

ArM*_*MaN 1 c# sql linq linq-to-entities linq-to-sql

我有一个连接两个表的LINQ表达式.我想有条件地检查另一个布尔值:( 注意*********下面的文字)

bool status = testfunc();

var List = 
    from t in Houses
    join k in Tbl_HouseOwner on t.HouseCode equals k.HouseCode
    where k.ReqCode== t.ReqCode 
    *********** if (status) { where k.Name.Contains(Name) } **********
    select new
    {
        ...
        name = k.Name,
        ...
    };
Run Code Online (Sandbox Code Playgroud)

das*_*ght 7

您可以使用status屏蔽条件,如下所示:

where k.ReqCode == t.ReqCode && (!status || k.Name.Contains(Name))
Run Code Online (Sandbox Code Playgroud)

如果statusfalse,则OR ||将立即成功,并且AND &&将为真(假设我们必须评估OR ||,AND的左侧&&必须为真).另一方面,如果statustrue,则k.Name.Contains(Name)需要对其进行评估以完成对条件的评估.