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

时间:2015-06-09 15:43:20

标签: 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<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>();

这是我的模特......

public class getBlinksModel
{
    public string METERNUMBER { get; set; }
    public int BLINKS { get; set; }
    public string SUBNAME { get; set; }
    public string FEEDERNAME { get; set; }
    public string ACCTNUM { get; set; }
    public string Latitude { get; set; }
    public string Longitude { get; set; }
}

4 个答案:

答案 0 :(得分:0)

根据您使用的.NET版本,这似乎是Enumerable.Intersect方法的合适情况:
List<getBlinksModel> blinkDetailsListWithGPS = blinkList.Intersect(as400GPSList).ToList();

正如其他人所说,这取决于你的共同价值。此方法将创建一个列表blinkDetailsListWithGPS,该列表由在另外两个相同类型blinkListas400GPSList的列表中找到的元素组成。

答案 1 :(得分:0)

您可以使用Linq join,这会将2个列表合并在一起,并返回两个列表中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();

答案 2 :(得分:0)

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

var query = from a in blinklist
            join b in as400GPSList on a.METERNUMBER = b.METERNUMBER
            select a;
List<getBlinksModel> joinedList = query.ToList();

此特定LINQ表达式将返回列表B(as400GPSList)中存在的列表A(闪烁列表)中的所有项目。如果你想获得一个BlinkModels A的新列表,其值为BlinkModels B,你可以使用@DavidG发布的代码here

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

答案 3 :(得分:0)

试试这个:

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();

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