2016-08-24 2 views
0

У меня есть три класса -Слияние трех списков с помощью LINQ

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

Association задает отображение между Type и SubType.

У меня есть список каждого класса - List<Type>, List<SubType>, List<Association>.

Я хочу, чтобы объединить их все в другой, как это - List<TypeInfo>. TypeId и SubTypeId приходит из Assoication, то TypeName исходя из Type и SubTypeName исходя из SubType.

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

Смежные вопросы