将LINQ查询缩小到一列

时间:2011-08-21 09:46:36

标签: c# linq

我正在尝试设置这样的查询。所以起初我选择了完整的对象..

var values = (from p in Products
              where p.LockedSince == null
              select p);

然后我可以选择添加额外的where

if(SupplierId > 0)
    values = values.Where(p => p.SupplierId == SupplierId);

最后,我不再需要完整的产品对象了,我只需要一个简单明了且有序列表的一列(p.LocationName)......就像这样:

values = values.Select( p.LocationName ).Distinct().OrderBy(x => x);

我尝试了类似Select(loc => new { p.LocationName })的东西,但没有运气。

2 个答案:

答案 0 :(得分:3)

如果您不需要中间结果,更有效的方法是编写单个查询

var values = (from p in Products 
              where (p.LockedSince == null && (SupplierId <=0 || p.SupplierId == SupplierId))
              select p.LocationName).Distinct().OrderBy(x => x);

答案 1 :(得分:2)

values = values.Select( p => p.LocationName ).Distinct().OrderBy(x => x);