【问题标题】:Delete List with same property删除具有相同属性的列表
【发布时间】:2020-11-17 16:27:49
【问题描述】:

我有一个对象列表。
每个对象都有 3 个属性。
有没有一种好方法可以检查获取属性相同的双重对象。

var upperT = dimensionList.GroupBy(x => x.UpperMetricToleranceValue).Select(x => x.First()).ToList();
var sizeT = dimensionList.GroupBy(x => x.ComputedSize).Select(x => x.First()).ToList();
var lowerT = dimensionList.GroupBy(x => x.LowerMetricToleranceValue).Select(x => x.First()).ToList();

foreach (var dimension in dimensionList)
{
    foreach (var upper in upperT)
    {
        foreach (var lower in sizeT)
        {
            foreach (var size in lowerT)
            {
                if (DELETE HERE IF SAME)
                {

                }
            }
        }
    }
}

所以我认为这不是使用它的好方法。
我不想使用像 moreLinq 这样的第三方库

【问题讨论】:

  • 可以尝试Round分组前的值;即如果5.998 ~ 6.001,您可以输入GroupBy(x => Math.Round(x * 100)).First();请注意,当double 包含整数值时,我们没有舍入错误
  • 如果数据存储在 RDBMS 中,使用 SQL 删除项目可能比使用四元嵌套循环更有效。
  • 这个问题写的很不清楚看起来你只需要按复合键分组。 demensionList.GroupBy(x => new { x.UpperMetricToleranceValue, x.ComputedSize, x.LowerMetricToleranceValue}

标签: c# list linq


【解决方案1】:

不要使用单个属性进行分组,而是一次使用三个属性:

var unique = dimensionList.GroupBy(x => new {UpperMetricToleranceValue=x.UpperMetricToleranceValue, ComputedSize=x.ComputedSize, LowerMetricToleranceValue=x.LowerMetricToleranceValue}).Select(g => g.First());

【讨论】:

  • 为什么使用元组而不仅仅是匿名类型
  • 是的,为什么不呢。会反映这一点。
  • 完美,附带说明一下,使用匿名应该更加通用,因为如果 OP 决定在 EF 中执行此操作,则不支持元组
  • @johnny5 感谢 cmets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多