我想通过检查集合的id是否与特定id,SelectedProc.Req.SPId匹配来从此集合中获取匹配对象IEnumerable。如何返回匹配对象?
目前,它给了我一个bool而不是匹配的对象。
var opObj = (await dataRepo.GetOperators()) //Returns Task<IEnumerable<Operator>>
.Where(a => string.Equals(a.ProcType, "ABC", StringComparison.OrdinalIgnoreCase))
.Select(x => x.ID == SelectedProc.Req.SPId);
答案 0 :(得分:4)
这是从集合中的每个元素中选择一个特定值:
.Select(x => x.ID == SelectedProc.Req.SPId)
该值为:
x.ID == SelectedProc.Req.SPId
这是一个布尔值。如果您只想要收集本身而不是任何转换,请完全删除.Select()
:
var opObj = (await dataRepo.GetOperators()) //Returns Task<IEnumerable<Operator>>
.Where(a => string.Equals(a.ProcType, "ABC", StringComparison.OrdinalIgnoreCase))
或者,如果您希望以前的代码是附加条件,请将其添加为附加条件:
var opObj = (await dataRepo.GetOperators()) //Returns Task<IEnumerable<Operator>>
.Where(a => string.Equals(a.ProcType, "ABC", StringComparison.OrdinalIgnoreCase))
.Where(x => x.ID == SelectedProc.Req.SPId)
这将返回一个集合。如果您只想返回单个匹配项,请改用.Single()
:
var opObj = (await dataRepo.GetOperators()) //Returns Task<IEnumerable<Operator>>
.Where(a => string.Equals(a.ProcType, "ABC", StringComparison.OrdinalIgnoreCase))
.Single(x => x.ID == SelectedProc.Req.SPId)
其他选项包括.SingleOrDefault()
,.First()
,.FirstOrDefault()
等。
基本上,.Select()
会选择所有元素并将其参数应用于转换结果。 .Where()
将过滤结果。 .Single()
或.First()
之类的内容将执行表达式树并从结果中返回一个元素。