Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多列表的linq内部联接扩展(通用方式)_C#_Asp.net_Asp.net Mvc_Linq_Inner Join - Fatal编程技术网

C# 多列表的linq内部联接扩展(通用方式)

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 &&

我想知道是否有任何方法可以使用Linq(通用方法)连接多个列表

我只是创建了一个连接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);
投入
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));