2016-08-24 12 views
0

との3つのリストをマージ -私は三つのクラスを持ってLINQ

Association
public class Type 
{ 
    public int TypeId {get;set;} 
    public string TypeName {get;set;} 
} 

public class SubType 
{ 
    public int SubTypeId {get;set;} 
    public string SubTypeName {get;set;} 
} 

public class Association 
{ 
    public int TypeId {get;set;} 
    public int SubTypeId {get;set;} 
} 

TypeSubType間のマッピングを提供します。

私は各クラスのリストを持っています - List<Type>List<SubType>List<Association>です。

私はこのような別のものにそれらすべてをマージしたい - Assoicationから来るList<TypeInfo>. TypeIdSubTypeIdTypeNameTypeから来るとSubTypeNameSubTypeから来ます。

public class TypeInfo 
{ 
    public int TypeId {get;set;} 
    public string TypeName {get;set;} 
    public int SubTypeId {get;set;} 
    public string SubTypeName {get;set;} 
} 

linqで簡単な方法はありますか?

答えて

2

それは非常にまっすぐ進むです:それは結合を使用として

List<Type> types = ... 
List<SubType> subTypes = ... 
List<Association> associations = ... 

IEnumerable<TypeInfo> query = 
    from type in types 
    join association in associations on type.TypeId equals association.TypeId 
    join subType in subTypes on association.SubTypeId equals subType.SubTypeId 
    select new TypeInfo() 
    { 
     TypeId = association.TypeId, 
     SubTypeId = association.SubTypeId, 
     TypeName = type.TypeName, 
     SubTypeName = subType.SubTypeName, 
    }; 

List<TypeInfo> typeInfos = query.ToList(); 
+0

ありがとうございました! – Bryan

-1

タイプとサブタイプがそれぞれListとListのタイプであると仮定します。

var associations = new List<Association>(); 
var typeInfoes = associations 
       .Join(types, a => a.TypeId, t => t.TypeId, 
         (a, t) => new TypeInfo 
         { 
          TypeId = a.TypeId, 
          TypeName = t.TypeName, 
          SubTypeId = a.SubTypeId, 
          SubTypeName = "" 
         } 
       ) 
       .Join(subTypes, ti => ti.SubTypeId, st => st.SubTypeId, 
         (ti, st) => new TypeInfo 
         { 
          TypeId = ti.TypeId, 
          TypeName = ti.TypeName, 
          SubTypeId = ti.SubTypeId, 
          SubTypeName = st.SubTypeName 
         } 
       ) 
       .ToList(); 
+0

Enigmativityの答えは優れています。結合のクエリ構文の代替として式チェーン構文を使用するように編集されました。 – bvoleti

関連する問題