C# 迭代两个列表,并在新列中组合相同的值
我有两个来自两个不同数据库的数据列表,它们共享一个公共列。我希望遍历这两个列表,如果在遍历ListB时发现ListA中的公共值,我希望向ListA上的同一行添加两个新列。一旦它对每一行都这样做了,我将只显示主列表的结果,或者将其添加到一个新列表中,如果这样做更好的话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
//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();