相关疑难解决方法(0)

linq distinct或由多个属性分组

如何使用c#和Linq result从下一个列表中获取:

 var pr = new List<Product>()
   {
       new Product() {Title="Boots",Color="Red",    Price=1},
       new Product() {Title="Boots",Color="Green",  Price=1},
       new Product() {Title="Boots",Color="Black",  Price=2},

       new Product() {Title="Sword",Color="Gray", Price=2},
       new Product() {Title="Sword",Color="Green",Price=2}
   };
Run Code Online (Sandbox Code Playgroud)

Result:

        {Title="Boots",Color="Red",  Price=1},               
        {Title="Boots",Color="Black",  Price=2},             
        {Title="Sword",Color="Gray", Price=2}
Run Code Online (Sandbox Code Playgroud)

我知道我应该使用GroupBy或者Distinct,但要了解如何获得所需的东西

   List<Product> result = pr.GroupBy(g => g.Title, g.Price).ToList(); //not working
   List<Product> result  = pr.Distinct(...);
Run Code Online (Sandbox Code Playgroud)

请帮忙

c# linq group-by distinct

34
推荐指数
2
解决办法
5万
查看次数

IQueryable.Distinct()vs List.Distinct()

我有一个我正在使用的linq查询Distinct().如果我只是调用Distinct()而不转换为List,那么它不会返回一个不同的列表 - 它仍然包含重复项.

但是,如果我转换为List 然后调用Distinct()- 它按预期工作,我只获得唯一的对象.

我正在使用Telerik ORM,返回的对象是表示数据库中某个表的类.

var uniqueUsers = (from u in Database.Users 
                   select u).Distinct();
Run Code Online (Sandbox Code Playgroud)

上面的代码不会产生不同的结果,但是当我转换为列表并调用distinct时 - 它确实:

var uniqueUsers = (from u in Database.Users 
                   select u).ToList().Distinct();
Run Code Online (Sandbox Code Playgroud)

我怀疑这与转换到列表之前的集合有关,比较对象的引用而不是对象数据本身但我不完全理解发生了什么 - 为什么第一个代码示例不会产生独特的结果以及会发生什么使用时的集合.ToList()使它工作?

[编辑]我已经简化了上面的查询,在现实世界中,查询有几个连接,它们会生成非唯一的结果,但是我只返回User对象.

我尝试重写EqualsGetHashCode方法,但这没有任何区别.

public override bool Equals(object obj)
{
    User comparingObject = obj as User ;

    if (comparingObject == null)
    {
        return false;
    }
    else
    {
        return comparingObject.UserID.Equals(this.UserID);
    }
}

public override int …
Run Code Online (Sandbox Code Playgroud)

c# linq iqueryable distinct telerik-open-access

4
推荐指数
1
解决办法
6053
查看次数

标签 统计

c# ×2

distinct ×2

linq ×2

group-by ×1

iqueryable ×1

telerik-open-access ×1