如何将LINQ结果添加到列表

时间:2016-04-01 05:45:40

标签: linq c#-4.0

DataTable dt = GetData(txtZip.Text);
List<Entity> objlist = new List<Entity>();

for (int i = 0; i < dt.Rows.Count; i++)
{
    Entity obj = new Entity();
    obj.Zipcode = Convert.ToInt32(dt.Rows[i].ItemArray[0]);
    obj.FacilityName = dt.Rows[i].ItemArray[1].ToString();
    obj.Latitude = Convert.ToDouble(dt.Rows[i].ItemArray[2]);
    obj.Longitude = Convert.ToDouble(dt.Rows[i].ItemArray[3]);

    objlist.Add(obj);
}

var result = objlist.GroupBy(member => member.Zipcode)
                    .Select(group => new
                    {
                        Zipcode = group.Key,
                        Latitude = ,
                        Longitude = ,
                        FacilityName = string.Join(",", group.Select(m =>    m.FacilityName))
                    }).ToList();

我想将结果添加到List,就像这样objList.Add(result) 在此之前,我添加到列表中的内容将覆盖此语句 以及如何获得纬度和经度

1 个答案:

答案 0 :(得分:-1)

显然我最初误解或误解了这个问题。

  

我想将结果添加到List,就像这个objList.Add(结果)一样,在此之前我添加到列表中的内容将覆盖此语句以及如何获取纬度和经度

要将多个项目添加到现有列表而不覆盖其中的内容,请使用

objlist.AddRange(_someIEnumerableOfT_)

实例方法。

  

以及如何获得纬度和经度

由于您已按邮政编码对实体进行分组,因此每个邮政编码很可能会有多个实体。您的select语句对每个组进行操作 - 一个键,以及共享该键的IEnumerable项。目前还不清楚您希望使用哪些值,但假设平均值足以供您使用,则以下代码可以满足您的需求。

  • 您正在创建一个新的匿名类型,而您很可能想要原始类型。
  • 通过将结果分配给原始列表,您将留下每个ZipCode的一个实体我认为这是最初的意图。
  • 您可以使用&#34; First()替换下面的平均方法调用。纬度&#34;如果你只对价值感兴趣由于GroupBy不保证空组,因此您不应该遇到First()抛出异常的情况。
objlist = objlist.GroupBy(member => member.Zipcode)
                .Select(group => new Entity
                {
                    Zipcode = group.Key,
                    Latitude = group.Average(m => m.Latitude),
                    Longitude = group.Average(m => m.Longitude),
                    FacilityName = string.Join(",", group.Select(m => m.FacilityName))
                }).ToList();