2

我有一个相当长的 linq 查询,一切正常。但在最终连接中,我正在对有日志的表进行内部连接,日志返回 50 多条记录,我只想要最新的记录。

这是一个例子

var tst = from w in context.storage
          join p in context.products on w.id equals p.wid
          join l in context.logger on p.id equals l.pid
          select new
          {
              storageid = w.id,
              productid = p.id
              productname = p.name
              bought = l.when
          };

所以快速解释发生了什么,每个产品都存储在一个存储中心,并且在购买该产品时有一个日志,如果它被购买了 100 次,那么记录器中有 100 条记录。

所以目前它返回 50 条 productid = 5 的记录...为什么 .. 因为它被购买了 50 次但我只想要 1 条记录,因此我只想要记录器的最新日期时间。

任何人都可以帮忙吗?我有点卡住了。

4

2 回答 2

5

仅用于result.Distinct(x => x.Prop)获取唯一条目

用于result.Max(x => x.Prop)获取最新日期和Min()最早获取日期。

于 2012-06-14T06:46:19.710 回答
1

在这种情况下,您希望限制要连接的记录集合,您可以通过手动编码连接来完成(有点):

from w in context.storage
join p in context.products on w.id equals p.wid
// "manual" join:
from l in context.logger.Where(l => l.pid == p.id).OrderByDescencing(l => l.when).Take(1)
select new
{
    storageid = w.id,
    productid = p.id
    productname = p.name
    bought = l.when
};

在流畅的 linq 语法中,这是一个带有结果选择器的 SelectMany

于 2012-06-14T07:16:35.573 回答