String Sex = getSex(); // return M or F
String[] members = getMembers(); // return member codes in array or null
//if members array is null, no filtering for member codes
var query = from tb in MemberTable
            where tb.sex.Equals(Sex) &&
                  (members != null ? members.Contains(tb.membercode) : true)
            select tb;

该代码未返回正确的结果。无论members[]是什么,它都会返回所有成员。

实际上,原始的LINQ很复杂,因此,如果还有其他可能的解决方案,我不想编写以下内容:
if (members == null){ /*LINQ1*/ }
else { /*LINQ2*/ }

这不是一种好的编码风格。
对解决这个问题有什么建议吗?

最佳答案

var query = MemberTable.Where(x=>x.sex.Equals(Sex))

if (members != null)
     query = query.Where(x=>members.Contains(x.membercode))

//use your query
query.ToList();

或者
var query = from tb in MemberTable
        where tb.sex.Equals(Sex) &&
              (members == null || members.Contains(tb.membercode))
        select tb;

我喜欢第一个。

关于c# - LINQ条件过滤,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20366189/

10-12 00:29
查看更多