2017-04-10 65 views
1

相关模型;强类型linq组

public class category_trans 
{ 
    [Key] 
    [Column(Order = 1)] 
    public int category_id { get; set; } 
    [Key] 
    [Column(Order = 2)] 
    public int language_id { get; set; } 
    public string name { get; set; } 
} 

目前Linq查询,工作:

IQueryable<category_trans> APC = 
      from ct in db.category_trans 
      from c in db.Categories 
      from l in db.ISO_Languages 
      where (
      ct.category_id == c.ID 
      && ct.language_id == l.ID 
      && l.code.Substring(0,2) == culture 
      && c.IsDeleted == false) 
      select ct; 

我想组查询结果,以获得不同的category_trans.name(我现在越来越多的人)。

试图

IQueryable<category_trans> APC = 
      from ct in db.category_trans 
      from c in db.Categories 
      from l in db.ISO_Languages 
      where (
      ct.category_id == c.ID 
      && ct.language_id == l.ID 
      && l.code.Substring(0,2) == culture 
      && c.IsDeleted == false) 
      group ct by ct.name into g 
      select new 
      { 
       category_id = g.category_id, 
       name = g.name 
      }; 

给我的错误上都g.category_idg.name

IGrouping <string,category_trans> does not contain a definition for 'category_id'... 

为什么分组似乎失去了参考模型成员,怎么还可能是固定的?

回答

1

因为组可以包含多个,您可以使用Key属性名称:

IQueryable<category_trans> APC = 
     from ct in db.category_trans 
     from c in db.Categories 
     from l in db.ISO_Languages 
     where (
     ct.category_id == c.ID 
     && ct.language_id == l.ID 
     && l.code.Substring(0,2) == culture 
     && c.IsDeleted == false) 
     group ct by ct.name into g 
     select new 
     { 
      category_id = g.First().category_id, 
      name = g.Key 
     }; 

我已经使用First拿到第一category_id,您可能需要使用不同的逻辑。

+0

谢谢蒂姆,工作。我只需要更改FirstOrDefault()并将类型返回到泛型IQueryable。 – Luke