簡體   English   中英

如何使用LINQ從多列列表中獲取x行

[英]How to use LINQ to take x rows from a multi column list

我有一個看起來像這樣的列表:

catId    itemId    value
  1        5         "some text"
  1        19        "some text"
  1        21        "some text"
  2        6         "some text"
  2        8         "some text"
  3        9         "some text"
  3        82        "some text"

注意catId列。 如何為第一個列中的每個唯一值取2行(或刪除額外的行)。 僅2行catId=1 2行用於catId=2等?

我的列表叫做distinctXSelling ,我現在正在使用它:

            foreach (var item in distinctXSelling)
            {
                xSelling.InnerHtml += item.value;
            }

您可以按類別ID對項目進行分組,然后在將組序列展平為一系列源項目之前,從每個組中選擇前兩項。 這看起來像:

var query = source.GroupBy(item => item.catId)
                  .SelectMany(catGroup => catGroup.Take(2));

需要注意的是Take方法需要高達一定數量的項目,因此,如果一個類只有一個項目,這將不會拋出。

正如BrokenGlass指出的那樣,如果您希望按特定順序輸出過濾后的項目,則可能需要.OrderBy (可能還有.ThenBy )。

您可能還想考慮用以下代碼替換循環:

xSelling.InnerHtml = string.Concat(query.Select(item => item.value));

如果您只是想將集合過濾到特定列,請使用Where()

var onlyCatOne = mySet.Where(x => x.catId == 1)

如果要按所有這些Group() ,請使用Group()

var groups = mySet.GroupBy(x => x.catId)

foreach(var group in groups)
{
   // Do Stuff
}

暫無
暫無

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

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