【发布时间】:2015-08-21 04:52:23
【问题描述】:
我有一个表格,其中包含有关项目和版本的详细信息,如下所示:
+--------+-----------+------------+----------------------------+
| BookId | VersionId | InstanceId | TitleText |
+--------+-----------+------------+----------------------------+
| 1 | 1 | 1 | A great book! |
| 1 | 2 | 2 | Great Book, v2! |
| 2 | 1 | 3 | Cooking for Dummies |
| 3 | 1 | 4 | Networks for Dummies |
| 2 | 2 | 5 | Cooking for Smarter People |
+--------+-----------+------------+----------------------------+
我正在尝试查询 BookId 的最新(最高)VersionId 的所有行。所以我想要的结果集如下所示:
+--------+-----------+------------+----------------------------+
| BookId | VersionId | InstanceId | TitleText |
+--------+-----------+------------+----------------------------+
| 1 | 2 | 2 | Great Book, v2! |
| 3 | 1 | 4 | Networks for Dummies |
| 2 | 2 | 5 | Cooking for Smarter People |
+--------+-----------+------------+----------------------------+
我运行的 SQL 是:
select t1.* from Books t1
left outer join Books t2
on (t1.BookId = t2.BookId and t1.VersionId < t2.VersionId)
where t2.BookId is null
但经过一番谷歌搜索后,我无法弄清楚如何将其转换为 linq 查询(使用扩展方法 sytax)。我看到的示例倾向于连接两个不同的表,我只是不知道如何将它塑造成我需要的。
找到了这个,它似乎与我要找的很接近,但是我该怎么做才能让 Foo 和 Bar 成为同一张桌子?
Foo.GroupJoin(
Bar,
foo => foo.Foo_Id,
bar => bar.Foo_Id,
(x,y) => new { Foo = x, Bars = y })
.SelectMany(
x => x.Bars.DefaultIfEmpty(),
(x,y) => new { Foo=x.Foo, Bar=y});
【问题讨论】:
标签: c# linq entity-framework