2

我有以下列表,但我想要基于 catID 的不同行,我该如何实现?

lst.AddRange(
            (from xx in this.FreeInstructionItems
             select new selectedCustomization()
             {
                 TypeName = CategoryType.SpecialInstruction,
                 CategoryName = xx.InstructionInfo.CatName,
                 ItemName = xx.InstructionInfo.Description,
                 SourceID = xx.InstructionInfo.InstructionId,
                 CatID = xx.InstructionInfo.CatID,
                 Items = GetAllFreeItemNames(CategoryType.SpecialInstruction, xx.InstructionInfo.CatID)
             }
            ).ToList()
            );
return lst;
4

4 回答 4

2

MoreLINQ和 DistinctBy 比所有 GroupBy hack 都要好:

return lst.DistinctBy(x => x.CatID);
于 2013-08-05T10:45:14.313 回答
1

GroupBy使用每个组的CatID属性和返回元素:First

return lst.GroupBy(x => x.CatID).Select(g => g.First()).ToList();
于 2013-08-05T10:40:59.447 回答
1

你可以这样做:

var results = 
    (from xx in this.FreeInstructionItems
     group xx by xx.InstructionInfo.CatID into g
     let instrInfo = g.First().InstructionInfo
     select new selectedCustomization()
     {
         TypeName = CategoryType.SpecialInstruction,
         CategoryName = instrInfo.CatName,
         ItemName = instrInfo.Description,
         SourceID = instrInfo.InstructionId,
         CatID = instrInfo.CatID,
         Items = GetAllFreeItemNames(
             CategoryType.SpecialInstruction, 
             instrInfo.CatID)
     });
lst.AddRange(results);
于 2013-08-05T10:41:26.827 回答
1
lst.AddRange(this.FreeInstructionItems.GroupBy(x=>x.InstructionInfo.CatID)
                                      .FirstOrDefault()
                                      .SelectMany(x=> new selectedCustomization()
              {
               TypeName = CategoryType.SpecialInstruction,
               CategoryName = x.InstructionInfo.CatName,
               ItemName = x.InstructionInfo.Description,
               SourceID = x.InstructionInfo.InstructionId,
               CatID = x.InstructionInfo.CatID,
               Items = GetAllFreeItemNames(CategoryType.SpecialInstruction, xx.InstructionInfo.CatID)
              }).ToList());
于 2013-08-05T10:42:38.263 回答