2011-03-11 41 views
1

如何根据id和datetime值从Linq列表中进行选择。我想要每个ID的最新项目。如何根据id和日期时间值从Linq列表中选择

所以我有一个列表,每个对象都有一个ID和一个日期时间。

我知道如何获得来自某个ID的物品。

var foundListings = (from listing in db.Listings 
         where listing.UserID == idToFind 
         select listing); 

但我想要做的是从每个ID中获取最新的项目。 因此,如果我有一个列表,让我们说5个清单,他们只有2个ID在那里。我想查询并获取最新日期的2件商品。

Linq有可能吗?我确定我可以迭代地通过for循环遍历列表,但是想看看我是否可以用Linq来完成,而且这有点超出了我的linq技能。

回答

2

您可能需要使用group by根据ID创建组,然后从每个组中选择最小值。我没有测试它,但结构应该是这样的:

var q = from listing in db.Listings 
     group by listing.UserID into g 
     select g.OrderBy(el => el.Value).First(); 

使用OrderBy子句是有点可惜,因为这意味着你要搜索的所有项目。不幸的是,没有经营者归还某些财产最大的物品。或者,你可以先找到最大值,然后发现其具有一定价值的元素:

var q = from listing in db.Listings 
     group by listing.UserID into g 
     let max = g.Max(el => el.Value) 
     select g.Where(el => el.Value == max).First(); 

这可能会略微高效(尤其是在内存中运行),因为它并不需要梳理整个组。

1
var result = from listing in db.Listings 
    group listing by listing.ID into g 
    select g.OrderByDescending(l => l.DateTime).First(); 
+0

这个效果很好。但是,当我查看表达式结果时,我得到“base {System.SystemException} = {”方法'First'只能用作最终查询操作。请考虑在此例中使用方法'FirstOrDefault'。“}” – Maestro1024 2011-03-11 13:26:46

+0

能够使用FirstOrDefault并且似乎正常工作 – Maestro1024 2011-03-12 11:12:44

相关问题