2017-04-10 7 views
1

関連モデル;強いタイプのlinqグループby

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 
     }; 

私が最初にcategory_idを取得するためにFirstを使用している、あなたは別のロジックを使用する場合があります。

+0

ありがとう、ティム、それは働いた。 FirstOrDefault()とタイプをジェネリックIQueryableに変更するだけでした。 – Luke