【问题标题】:Ignore Records that have same value of same property in the IEnumerable C# [closed]忽略在IEnumerable C#中具有相同属性值的记录[关闭]
【发布时间】:2019-12-19 14:37:18
【问题描述】:

我想获取所有具有不同的 bugetType 属性值的记录,并忽略所有具有相同 bugetType 属性值的记录...该怎么做?

FreelancerProjectsNoduplication = _context.FreelancerProjects.GroupBy(f => f.BugetType).Where(g => g.Count() > 1).SelectMany(g => g),

【问题讨论】:

  • 试试.GroupBy(f => f.BugetType).Where(g => g.Count() > 1).SelectMany(g => g)
  • @LasseV.Karlsen 你确定g.Count() > 1(取重复的类型)而不是g.Count() == 1(取不重复的类型)我也认为他的意思是.GroupBy(f => f.BugetType).Select(g=>g.First())但问题不清楚
  • 我已经使用了两种方法 (g>1) 和 (g==1) 第一种 (g>1) 获取所有记录,第二种不获取任何记录
  • 我在我提供的评论中看到了这个漏洞,但我希望他也能看到它,以便澄清所使用的语言。我已经用一个文字示例进行了评论,但我也怀疑这是否是他想要的。
  • 如果您使用了我评论中的代码,但它仍然返回所有行,这意味着您有不同的 BugetType 值。

标签: c# asp.net linq


【解决方案1】:

.Distinct 方法有一个重载,它将IEqualityComparer<T> 作为第一个参数。例如,如果您想基于SomeInt 属性对SomeClass 的集合执行.Distinct 操作,您可以使用IEqualityComparer<SomeClass>,如SomeClassComparer 实现:

public class SomeClass
{
    public string SomeString { get; set; }

    public int SomeInt { get; set; }
}

public class SomeClassComparer : IEqualityComparer<SomeClass>
{
    public bool Equals(SomeClass x, SomeClass y)
    {
        return x.SomeInt.Equals(y.SomeInt);
    }

    public int GetHashCode(SomeClass obj)
    {
        return obj.SomeInt.GetHashCode();
    }
}

那你就可以CollectionOfSomeClass.Distinct(new SomeClassComparer());

更多关于IEqualityComparer&lt;T&gt;的信息请见here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多