我有以下两个表:
DocumentType
Id INT,
Name VARCHAR(100),
Active BIT,
CreatedBy INT
Document
Id INT,
DocumentTypeId INT,
Version SMALLINT,
Text NTEXT
我想选择DocumentType
和相关的Document
记录,其中Version
的值最大。我尝试了以下查询:
from t in Documents
join tt in DocumentTypes on t.DocumentTypeId equals tt.Id
where tt.CreatedBy == 10
group t by t.DocumentTypeId into g
//let v = new {Version = g.Max( t => t.Version), TypeId =g.Key}
select new
{
Key = g.Key,
Version = g.Max(t=>t.Version),
Text = t.Text //ERROR AT t.Text
};
但它在下一行给我一个错误:
Text = t.Text
The name 't' does not exist in the current context
我也试过g.Text
,但它没有帮助。请帮我修复此查询。我在LinqPad尝试这个。
答案 0 :(得分:2)
您似乎需要检索具有相同Document
的{{1}}实体,该实体具有DocumentType
属性的最大值。无需按Version
列进行分组。
分组后,您有一组文件。唯一剩下的就是为每个组获得一个最大ntext
值。我按此属性按降序排序组,并获得第一个值:
Version
如果需要,您可以将结果from t in Documents
join tt in DocumentTypes on t.DocumentTypeId equals tt.Id
where tt.CreatedBy == 10
group t by t.DocumentTypeId into g
select g.OrderByDescending(t => t.Version).FirstOrDefault();
实体投影为匿名类型。
答案 1 :(得分:1)
尝试
from t in Documents
join tt in DocumentTypes on t.DocumentTypeId equals tt.Id
where tt.CreatedBy == 10
orderby t.Version descending
group t by t.DocumentTypeId into g
select new
{
Key = g.Key,
Version = g.First().Version,
Text = g.First().Text
};
答案 2 :(得分:0)
t
已经代表别的东西了
试试这种方式
Version = g.Max(x=>t.Version),