如何在Enumerable方法中添加条件语句?

atc*_*way 0 c# linq lambda

我可能会尝试在这里做一些可能无法做到的事情.是否可以SingleOrDefault在我正在构建的表达式上为可枚举方法注入一些逻辑.

这笔交易是我会得到(2)相同的查询结果,而不是用于拉取结果的参数.

交易是IDID2价值并非在所有条件下都存在.我正在尝试创建一个基于条件缩小结果的单个表达式.这是我想要完成的事情:

//'ID' and 'ID2' sre parameters passed into method
var query = Repository.GetQuery<Person>()
                      .Include(x => x.PersonDetail)
                      .SingleOrDefault(
                                       if (String.IsNullOrWhiteSpace(ID))
                                       {
                                         x => x.PersonDetail.ID2 == ID2;
                                       }
                                       else
                                       {
                                         x => x.PersonDetail.ID == ID;
                                       }
                                       );
Run Code Online (Sandbox Code Playgroud)

现在它不会构建并产生以下错误:

无法解析符号PersonDetail

好吧,所以我可能已经完全解释了实现,但基本上我可以像上面尝试的那样做,或者我必须编写(2)单独的查询来拉动相同的数据,并保持"决定逻辑"在外部表达?

任何帮助表示赞赏,谢谢!

Jon*_*Jon 6

您的分支条件是已知的,因此您可以(并且应该)将分支拉出lambda:

var query = Repository.GetQuery<Person>()
                      .Include(x => x.PersonDetail);

if (String.IsNullOrWhiteSpace(ID))
{
    query = query.Where(x => x.PersonDetail.ID2 == ID2);
}
else
{
    query = query.Where(x => x.PersonDetail.ID == ID);
}

var result = query.SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

还有很多其他方法可以写这个,但重要的是你根本不需要ID检查lambda.