首页 > 解决方案 > 更新关于重复的字段 IEnumerable c# EF

问题描述

我有以下查询:

sqlQuery = 'SELECT MPID, MAPPOINT, X, Y, MPCODE, MultipleSite = 0 FROM MAPPOINT'
 var data = context.Database.SqlQuery<WayPoint>(sqlQuery).ToList();

我在下面粘贴了结果。

我想更新此结果并将MultipleSiteColumn 设置为 1,以防其他行具有相同的XY值。

例如:记录 2 和 3 具有相同的XY值,所以我想将它们的列的值更新MultipleSite为 1。我是否必须迭代结果并进行一些比较,或者我可以用其他方式吗?

这个想法是有一个标志告诉我在那个坐标中还有其他站点。

我的课看起来像这样:

public class WayPoint
{
  public int MPID { get; set; }
  public string MAPPOINT { get; set; }
  public double X { get; set; }
  public double Y { get; set; }
  public string MPCODE { get; set; }
  public bool MultipleSite { get; set; }
}

在此处输入图像描述

标签: c#linq

解决方案


给定您的数据模型(即WayPoint),请尝试以下操作:

             data.GroupBy(o => new { X = o.X, Y = o.Y })
                .Select(g => new
                {
                    Items = g.Select(gp => new WayPoint
                        {
                            MPID = gp.MPID,
                            MAPPOINT = gp.MAPPOINT,
                            X = g.Key.X,
                            Y = g.Key.Y,
                            MPCODE = gp.MPCODE,
                            MultipleSite = g.Count() > 1
                        })
                }
              )
              .SelectMany(g=>g.Items)
              .ToList();

推荐阅读