C#加入群组查询
C# Join Group query
我正在使用这个查询:
var result =
from i in dc.TFFiles
where i.Tid == tid
group i by new { i.Title, i.Type } into gr
join c in dc.FCategories on gr.FirstOrDefault().CatId equals c.Id
select new { id = gr.FirstOrDefault().id, Title = gr.FirstOrDefault().Title, Version = (from cv in gr select cv.Version).Max() };
但是如果有这些TF文件:
id | tid | Title | Type | Version
0 | 15 | File1 | Type1 | 0
1 | 15 | File2 | Type1 | 0
2 | 15 | File1 | Type1 | 1
3 | 15 | File1 | Type1 | 2
我会回来的:
id | tid | Title | Type | Version
0 | 15 | File1 | Type1 | 2 (wrong version - id)
1 | 15 | File2 | Type1 | 0
而不是:
id | tid | Title | Type | Version
3 | 15 | File1 | Type1 | 2 (correct version - id)
1 | 15 | File2 | Type1 | 0
如何更改查询以获得正确的结果?
我在评论中的第一个建议是获取最大 ID,但这可能 return 错误的 ID。
第二个建议是使用以下内容:
id = gr.OrderByDescending(item => item.Version).FirstOrDefault().id
这将从具有最高版本的组中获取 id,通过使用降序排序。
还有一件事:如果有相同的记录只是 id 不同,那么 id returned 可能不是最后一个。假设这不是问题。
我正在使用这个查询:
var result =
from i in dc.TFFiles
where i.Tid == tid
group i by new { i.Title, i.Type } into gr
join c in dc.FCategories on gr.FirstOrDefault().CatId equals c.Id
select new { id = gr.FirstOrDefault().id, Title = gr.FirstOrDefault().Title, Version = (from cv in gr select cv.Version).Max() };
但是如果有这些TF文件:
id | tid | Title | Type | Version
0 | 15 | File1 | Type1 | 0
1 | 15 | File2 | Type1 | 0
2 | 15 | File1 | Type1 | 1
3 | 15 | File1 | Type1 | 2
我会回来的:
id | tid | Title | Type | Version
0 | 15 | File1 | Type1 | 2 (wrong version - id)
1 | 15 | File2 | Type1 | 0
而不是:
id | tid | Title | Type | Version
3 | 15 | File1 | Type1 | 2 (correct version - id)
1 | 15 | File2 | Type1 | 0
如何更改查询以获得正确的结果?
我在评论中的第一个建议是获取最大 ID,但这可能 return 错误的 ID。
第二个建议是使用以下内容:
id = gr.OrderByDescending(item => item.Version).FirstOrDefault().id
这将从具有最高版本的组中获取 id,通过使用降序排序。
还有一件事:如果有相同的记录只是 id 不同,那么 id returned 可能不是最后一个。假设这不是问题。