Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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# 迭代两个列表,并在新列中组合相同的值_C#_Asp.net_.net_Database_Asp.net Web Api - Fatal编程技术网

C# 迭代两个列表,并在新列中组合相同的值

C# 迭代两个列表,并在新列中组合相同的值,c#,asp.net,.net,database,asp.net-web-api,C#,Asp.net,.net,Database,Asp.net Web Api,我有两个来自两个不同数据库的数据列表,它们共享一个公共列。我希望遍历这两个列表,如果在遍历ListB时发现ListA中的公共值,我希望向ListA上的同一行添加两个新列。一旦它对每一行都这样做了,我将只显示主列表的结果,或者将其添加到一个新列表中,如果这样做更好的话 //Create a list to store blink details data in from the AMI... List<getBlinksModel> blinkList = new List<ge

我有两个来自两个不同数据库的数据列表,它们共享一个公共列。我希望遍历这两个列表,如果在遍历ListB时发现ListA中的公共值,我希望向ListA上的同一行添加两个新列。一旦它对每一行都这样做了,我将只显示主列表的结果,或者将其添加到一个新列表中,如果这样做更好的话

//Create a list to store blink details data in from the AMI...
List<getBlinksModel> blinkList = new List<getBlinksModel>();

//Create a list for the as400 data...
List<getBlinksModel> as400GPSList = new List<getBlinksModel>();

//Create a list for all the data...
List<getBlinksModel> blinkDetailsListWithGPS = new List<getBlinksModel>();

根据您使用的.NET版本,这似乎是该方法的适当情况:
List blinkDetailsListWithGPS=blinkList.Intersect(as400GPSList.ToList()


正如其他人提到的,这取决于你所说的共同价值。此方法将使用GPS创建一个列表
blinkDetailsList
,该列表由两个相同类型的其他列表中的元素组成
blinkList
as400GPSList

您可以使用a,这将两个列表连接在一起,并返回两个列表中都存在
METERNUMBER
但使用经度/纬度表单
as400GPSList
的项目:

List<getBlinksModel> blinkDetailsListWithGPS
            = (from b in blinkList
               join a in as400GPSList
                   on b.METERNUMBER equals a.METERNUMBER
               select new getBlinksModel
               {
                   METERNUMBER = a.METERNUMBER,
                   BLINKS = a.BLINKS,
                   ACCTNUM = a.ACCTNUM,
                   FEEDERNAME = a.FEEDERNAME,
                   SUBNAME = a.SUBNAME,
                   Latitude = b.Latitude,
                   Longitude = b.Longitude
               }).ToList();
使用GPS列出闪烁细节列表
=(从闪烁列表中的b开始)
加入as400GPSList
关于b.METERNUMBER等于a.METERNUMBER
选择新建getBlinksModel
{
METERNUMBER=a.METERNUMBER,
眨眼,
ACCTNUM=a.ACCTNUM,
FEEDERNAME=a.FEEDERNAME,
SUBNAME=a.SUBNAME,
纬度=b.纬度,
经度
}).ToList();

您可以使用LINQ获取所需信息:

var query = from a in blinklist
            join b in as400GPSList on a.METERNUMBER = b.METERNUMBER
            select a;
List<getBlinksModel> joinedList = query.ToList();
var query=来自列表中的
将b加入a.METERNUMBER=b.METERNUMBER上的as400GPSList
选择一个;
List joinedList=query.ToList();
此特定LINQ表达式将返回列表B(as400GPSList)中存在的列表A(blinklist)中的所有项目。如果您想获得一个新列表,其中包含BlinkModels a和BlinkModels B的值,您可以使用@DavidG发布的代码

如果需要其他信息,可以更改select语句。

尝试以下操作:

List<getBlinksModel> blinkDetailsListWithGPS = blinkList.Join
(
    as400GPSList,
    x => x.METERNUMBER,
    y => y.METERNUMBER,
    (x, y) => {
        x.Latitude = y.Latitude;
        x.Longitude = y.Longitude;
        return x;
    }
).ToList();
List blinkDetailsListWithGPS=blinkList.Join
(
as400GPSList,
x=>x.METERNUMBER,
y=>y.METERNUMBER,
(x,y)=>{
x、 纬度=y.纬度;
x、 经度=y。经度;
返回x;
}
).ToList();

请注意,这不会创建新的
getBlinksModel
对象,而是使用
blinkList
中的对象,并初始化
纬度
经度
属性。

getBlinksModel
看起来像什么。。。和公共值,这两个列表都有一个meternumber的公共数据列,我希望列表a中列表B中的meternumber与列表B中的经度和纬度列一起显示在列表a中。因此,这两个列表可能都包含meternumber=5,例如?@DavidG,这是正确的。在ListB上,meternumber将有另外两列,我想将这些列添加到listA上的同一个meternumber中。这是我最初的想法,但我仍然无法隐式地将类型Ienumerable转换为list。private void getCompleteResult(){List blinkDetailsListWithGPS=blinkList.Intersect(as400GPSList)}@CMA请尝试将IEnumerable转换为具有blinkList.Intersect(as400GPSList).ToList()的列表
List<getBlinksModel> blinkDetailsListWithGPS = blinkList.Join
(
    as400GPSList,
    x => x.METERNUMBER,
    y => y.METERNUMBER,
    (x, y) => {
        x.Latitude = y.Latitude;
        x.Longitude = y.Longitude;
        return x;
    }
).ToList();