0

我有一个清单。我需要通过应用 Group By 来找到唯一的 ExistingData 记录。以下代码有效。

 var distinctItemsWorking = myCostPages
        .GroupBy(x => new { 
                             x.CostPageContent.Program, 
                             x.CostPageContent.Group, 
                             x.CostPageContent.Sequence })
        .Select(y => y.First());

现在我需要将唯一列表转换为列表。我们在做 Grouping 的时候如何实现这种转换呢?

C# 方法

    public List<CostPage> GetCostPages(SearchEntity search, int pageIndex, int pageSize)
    {
        List<ExistingData> AllData = GetExistingData();

        var allMatchingValues = from existingDatas in AllData
                                where existingDatas.CostPageContent.Program == search.Program
                                select existingDatas;


        var query = allMatchingValues;
        List<ExistingData> currentSelectionForExistingData = query
            .Skip(pageIndex * pageSize)
            .Take(pageSize)
            .ToList();


        //var distinctItems = currentSelectionForExistingData.GroupBy(x => new { x.CostPageContent.Program, x.CostPageContent.Group, x.CostPageContent.Sequence })
        //                    .Select(y => new CostPage()
        //                    {
        //                        CostPageContent = y.CostPageContent 
        //                    }
        //                    );

        var distinctItemsWorking = currentSelectionForExistingData.GroupBy(x => new { x.CostPageContent.Program, x.CostPageContent.Group, x.CostPageContent.Sequence })
                           .Select(y => y.First());

        List<CostPage> myCostPages = new List<CostPage>();
        foreach (ExistingData exist in distinctItemsWorking)
        {
            CostPage c = new CostPage();
            c.CostPageContent = exist.CostPageContent;
            myCostPages.Add(c);
        }

        return myCostPages;
    }

其他类

public class ExistingData
{
    public CostPageNumberContent CostPageContent { get; set; }
    public string ItemID { get; set; }
}

public class CostPage
{
    public CostPageNumberContent CostPageContent { get; set; }
}


public class CostPageNumberContent
{
    public string Program { get; set; }
    public string Group { get; set; }
    public string Sequence { get; set; }
}

public class SearchEntity
{
    public string Program { get; set; }
    public string Sequence { get; set; }
    public string ItemID { get; set; }
}
4

1 回答 1

2

如果您尝试替换foreach,您可以执行以下操作:

var myCostPages = currentSelectionForExistingData
    .GroupBy(x => new { x.CostPageContent.Program, x.CostPageContent.Group, 
                        x.CostPageContent.Sequence })
    .Select(y => new CostPage { CostPageContent = y.First().CostPageContent })
    .ToList();

将对象的创建CostPage放入GroupBy其中是没有意义的。这Select是执行此转换的正确位置。

于 2013-08-06T15:55:28.197 回答