1

我有以下两个表:

DocumentType
    Id INT,
    Name VARCHAR(100),
    Active BIT,
    CreatedBy INT

Document
    Id INT,
    DocumentTypeId INT,
    Version SMALLINT,
    Text NTEXT

我想选择与最大值DocumentType相关的记录。我尝试了以下查询:DocumentVersion

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 中尝试这个。

4

3 回答 3

2

似乎您需要检索具有相同属性的最大值的Document实体。无需按列分组。DocumentTypeVersionntext

分组后,您将拥有多组文档。剩下的唯一事情就是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();

如果需要,您可以将结果Document实体投影为匿名类型。

于 2013-02-21T11:20:19.833 回答
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 
    };
于 2013-02-21T19:19:15.750 回答
0

t已经代表别的东西了。
试试这个方法

Version = g.Max(x=>t.Version), 
于 2013-02-21T05:30:09.803 回答