C# 多列表的linq内部联接扩展(通用方式)
我想知道是否有任何方法可以使用Linq(通用方法)连接多个列表 我只是创建了一个连接2列表的通用方法C# 多列表的linq内部联接扩展(通用方式),c#,asp.net,asp.net-mvc,linq,inner-join,C#,Asp.net,Asp.net Mvc,Linq,Inner Join,我想知道是否有任何方法可以使用Linq(通用方法)连接多个列表 我只是创建了一个连接2列表的通用方法 public static T Merge<T>(T List1, T List2) where T : new() { var properties = typeof(T) .GetProperties() .Where(p => p.CanRead &&
public static T Merge<T>(T List1, T List2) where T : new()
{
var properties = typeof(T)
.GetProperties()
.Where(p => p.CanRead && p.CanWrite && !p.GetIndexParameters().Any());
T result = new T();
foreach (var prop in properties)
{
object value = prop.GetValue(List1) ?? prop.GetValue(List2);
prop.SetValue(result, value);
}
return result;
}
List<student> _List1 = List1.Cast<student>().ToList();
List<student> _List2 = List2.Cast<student>().ToList();
var mergedlist = from a in _List1
join b in _List2
on a.stid equals b.stid
select Merge(a, b);
投入
List\u List1=人员列表
列表_List2=地址列表
var ListgroupedList=新列表();
groupedList.add(_List1);
groupedList.add(_List2);
var Result=Merge(groupedList,/*分组条件*/,/*结果细节*/);
但我需要将多个列表传递到合并函数中。我们如何实现
我们如何使用TModel
我只是创建了一个连接2列表的通用方法
public static T Merge<T>(T List1, T List2) where T : new()
{
var properties = typeof(T)
.GetProperties()
.Where(p => p.CanRead && p.CanWrite && !p.GetIndexParameters().Any());
T result = new T();
foreach (var prop in properties)
{
object value = prop.GetValue(List1) ?? prop.GetValue(List2);
prop.SetValue(result, value);
}
return result;
}
List<student> _List1 = List1.Cast<student>().ToList();
List<student> _List2 = List2.Cast<student>().ToList();
var mergedlist = from a in _List1
join b in _List2
on a.stid equals b.stid
select Merge(a, b);
否,您创建了合并两个对象的方法
如果您需要连接多个列表,可以使用连接两个列表的相同方法,只需使用Aggregate
List<Person> _List1 = new List<Person>();
List<Address> _List2 = new List<Address>();
var groupedList = new List<IEnumerable<TModel>>
{
_List1,
_List2
};
IEnumerable<TModel> aggr = groupedList.Aggregate((listA, listB) =>
from a in listA
join b in listB
on a.stid equals b.stid
select Merge(a, b));
List_List1=newlist();
列表_List2=新列表();
var groupedList=新列表
{
_清单1,
_清单2
};
IEnumerable aggr=groupedList.Aggregate((listA,listB)=>
来自listA的一家公司
在列表b中加入b
关于a.stid等于b.stid
选择合并(a,b));
如果两个列表都有相同类型的项,为什么不使用方法作为示例?或者,如果类型不同,则需要将多个类型化列表传递到函数merge中。当前函数返回基于属性值null或not的学生类型列表。@JishnuChandran如果正如Pavel建议的那样对您不起作用,那么“连接多个列表”的实际含义是什么?您能展示示例输入和预期输出吗?@Xerilio Hi,添加了更多详细信息。您能看看这个吗。需要传递另一个列表吗lists@JishnuChandran我知道您想要合并多个列表,但是如何合并人员
和地址
?(对我来说)这是没有道理的。请显示一些实际数据作为输入和输出。这将帮助我们理解将List
与List
合并意味着什么。
List<Person> _List1 = new List<Person>();
List<Address> _List2 = new List<Address>();
var groupedList = new List<IEnumerable<TModel>>
{
_List1,
_List2
};
IEnumerable<TModel> aggr = groupedList.Aggregate((listA, listB) =>
from a in listA
join b in listB
on a.stid equals b.stid
select Merge(a, b));