如何在对象列表或对象的一个​​或多个属性上使用 Distinct [重复]

Posted

技术标签:

【中文标题】如何在对象列表或对象的一个​​或多个属性上使用 Distinct [重复]【英文标题】:How to use Distinct on a list of object or on one or more properties of the object [duplicate] 【发布时间】:2017-05-17 04:53:00 【问题描述】:

我需要获取唯一送货地址的列表。

var shippingAddresses = ShopApi.Checkout.GetShippingAddresses(Shop.CommerceContext.AccountId).ToList();

这将为我提供一个送货地址对象列表,但其中两个对象的 Id 列具有相同的值。如何过滤或仅获取列表中的一个值?

我的 ShippingAddress 对象如下所示。

public string Id  get; set; 
public string CustomerId  get; set; 
public string Address  get; set; 
public string Address2  get; set; 
public string City  get; set; 
public string CountryId  get; set; 

【问题讨论】:

你如何决定你想要哪一个? 无需决定。我只想要唯一的列表地址。 【参考方案1】:

对于您的情况,我有一个解决方案。您可以再次过滤您的列表,以便为每个 Id 值仅获取 1 行

public class ShippingAddresses

    public string Id  get; set; 
    public string CustomerId  get; set; 
    public string Address  get; set; 
    public string Address2  get; set; 
    public string City  get; set; 
    public string CountryId  get; set; 


List<ShippingAddresses> shippingAddresses = new List<ShippingAddresses>();

//This statement will help you only get 1 row for each ID value
shippingAddresses = shippingAddresses.GroupBy(p => p.Id).Select(p => p.First()).ToList();

【讨论】:

【参考方案2】:

在该 ShippingAddress 对象的某处,有一个底层数据库查询。该查询需要修改为仅包含唯一结果...如下所示:

(from dbo in database.ShippingAddress
 select dbo.Id).Distinct()

【讨论】:

我不能这样做,因为查询部分位于 DLL 中。

以上是关于如何在对象列表或对象的一个​​或多个属性上使用 Distinct [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何保存属性也是对象并且在多个级别上的python对象?

无法使用Javascript或JQuery修剪对象属性

如何根据属性值对对象列表进行排序

c# 如何获取列表中某个属性最大或最小的元素?

WPF将单个文本框绑定到集合对象或数组中的元素

vue 为已有对象赋值多个新属性的方法