用linq合并三个列表

本文关键字:三个 列表 linq 合并 | 更新日期: 2023-09-27 18:04:03

我有三个类-

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给出了TypeSubType之间的映射。

我有每一类List<Type>, List<SubType>, List<Association>的列表。

我想把它们合并成另一个像这样的- List<TypeInfo>.TypeIdSubTypeId来自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 ?

用linq合并三个列表

很直接:

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();

假设type和subTypes分别为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();