用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
给出了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
?
很直接:
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();