簡體   English   中英

Linq查詢的獨特價值

[英]Distinct Value from Linq Query

我有以下classlinq查詢我用來填充grid

返回的每一行的Title都是相同的。 我想要做的是使用查詢中的distinct Title填充mString ,以便將其綁定到單獨的文本塊。

我可能不需要顯示所有代碼,但也許它會有所幫助。 如何顯示distinct Title

public class Items
{
    public int Id { get; set; }
    public string Details { get; set; }
    public string Title { get; set; }
    public int NewNumber { get; set; }
}

private ObservableCollection<Items>  mItem = new ObservableCollection<Items>();
private string mString = string.Empty;

public string SpecTitle
{
    get { return mString; }
}

public ObservableCollection<Items> GetItems
{
    get { return mItem; }
}

這是linq查詢

var results = (from z in mContext.View
               orderby z.ItemNumber ascending
               where z.ItemId == mId
               select new Items()
               {                                         
                   Id = z.ItemId,
                   Details = z.Details,
                   Title = z.ItemTitle,
                   NewNumber = z.ItemNumber
               });

List<Items> mNewItems = results.ToList();
mItem.Clear();
mNewItems.ForEach(y => mItem.Add(y));

將我的評論轉換為答案:

只需做Items.Select(x => x.Title).Distinct();

var titleList = mNewItems.Select(i => i.Title).Distinct().ToList();

還有一個名為moreLinq https://code.google.com/p/morelinq/的額外庫,它具有明顯的擴展性,您可以根據給定的密鑰進行區分。

它就像這樣

   var results = (from z in mContext.View
                                 orderby z.ItemNumber ascending
                                 where z.ItemId == mId
                                 select new Items()
                                 {                                         
                                     Id = z.ItemId,
                                     Details = z.Details,
                                     Title = z.ItemTitle,
                                     NewNumber = z.ItemNumber

                                 }).DistinctBy(c=>c.Title).ToList();

您可以為distinct執行自定義比較器:

public class ItemsComparer : IEqualityComparer<Items>
{
    public bool Equals(Items x, Items y)
    {
        return x.Title == y.Title;
    }

    public int GetHashCode(Items obj)
    {
        return obj.Title.GetHashCode();
    }
}

然后只是使用

var titleList = mNewItems.Distinct(new ItemsComparer()).Select(t=>t.Items);

暫無
暫無

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

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