簡體   English   中英

如何從自定義列表中獲取不同的列表?

[英]How to get distinct List from a custom list?

我正在使用c#framework 3.5 ..

我的班級在這里

  public class KonumBilgisi
{

    public string Enlem { get; set; }
    public string Boylam { get; set; }
    public string KonumAdi { get; set; }
    public DateTime Tarih { get; set; }
    public byte SucTuruId { get; set; }

}

我有一份清單

列出konumlar;

好吧,我希望得到的項目相當於他們的enlem和boylam變量。

正如您在下面的照片中看到的那樣

在此輸入圖像描述

我想要enlem和boylam,如果它相等,我想讓他們到不同的列表..

我可以用循環但是想要使用LINQ,但我無法做到這一點。 我使用groupby但它沒有錯...

   var distinctList = konumlar.GroupBy(x => x.Enlem)
                        .Select(g => g.First())
                        .ToList().GroupBy(s=>s.Boylam).Select(g => g.First())
                        .ToList();

編輯其實我無法解釋我的問題..

也許不同是不正確的單詞..我想分開彼此相等的項目..

如:

我將pendik項目放在一個列表中,其他人將在konumlar中,但pendik項目將從konumlar列表中刪除

編輯2

好的,我想像這樣單獨列出

在此輸入圖像描述

在此輸入圖像描述

您幾乎就在那里 - 而不是使用兩個單獨的GroupBy調用,使用單個調用,使用兩部分鍵:

var distinctList = konumlar
    .GroupBy(s => new {s.Enlem, s.Boylam})
    .Select(g => g.First())
    .ToList();

編輯:要獲取重復項之外的所有項目,請按如下所示修改查詢:

var noPendiks = konumlar
    .GroupBy(s => new {s.Enlem, s.Boylam})
    .Where(g => g.Count() == 1)
    .Select(g => g.Single()) // You know there's only one
    .ToList();

以上將為您提供除“pendik”之外的所有項目。 要僅獲取“pendik”,請使用以下查詢:

var pendiks = konumlar
    .GroupBy(s => new {s.Enlem, s.Boylam})
    .Where(g => g.Count() > 1)
    .SelectMany(g => g)
    .ToList();

但是,您可以使用Distinct()Linq函數,它只能處理相同的項目。 如果您需要DistinctBy(),可以使用DistinctBy()方法創建LinqExtensions類。

這是我常用的一個:

/// <summary>
///     Provides common extension methods on LINQ members.
/// </summary>
public static class LinqExtensions
{
    #region Members

    public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
    {
        HashSet<TKey> seenKeys = new HashSet<TKey>();
        foreach (TSource element in source)
        {
            if (seenKeys.Add(keySelector(element)))
            {
                yield return element;
            }
        }
    }

    #endregion Members
}

用它作為:

var distinctList = konumlar.DistinctBy(x => x.property && x.property2 && ...);

親切的問候

我認為這是你想要的:

List<KonumBilgisi> distinctList = konumlar
    .GroupBy(k => new { k.Enlem, k.Boylam })
    .SelectMany(x => x.GroupBy(k => k.Boylam).First())
    .ToList();

它根據這兩個屬性選擇獨特的項目,然后根據Boylam選擇獨特的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM