在Linq查询中分组项目

本文关键字:项目 Linq 查询 | 更新日期: 2023-09-27 18:07:16

我正在尝试对电子搜索结果项的结果集进行分组并在屏幕上输出它们,我使用以下代码

var groupdResults = 
    from result in response.Results
    orderby result[SearchSmartFormProperty.GetDateProperty("/root/FundClosingDate")]
    group result by result[SearchSmartFormProperty.GetStringProperty("/root/DeadlineAltText")] 
    into statusGroup
    select new 
    { 
        closingDate =statusGroup.Key,
        count= statusGroup.Count
    };

然后将这些添加到listview: uxSearchResultView。DataSource = groupresults;

我遇到的问题是,我需要从结果集输出所有数据,例如标题,关闭日期等。它目前只输出,例如:关闭2开放1

非常感谢任何人提供的帮助

----------------------- 更新 -------------------------------------我想我现在有一个可行的解决方案,但它有点乱

var groupdResults = from result in response.Results
                                orderby result[SearchSmartFormProperty.GetDateProperty("/root/FundClosingDate")]
                                group result by result[SearchSmartFormProperty.GetStringProperty("/root/DeadlineAltText")] 
                                into statusGroup
                                    select new 
                                    {
                                        closingDate = statusGroup.Key,
                                        count = statusGroup.Count(),
                                        items = statusGroup.ToList()
                                    };
    List<Ektron.Cms.Search.SearchResultData> SRDATA = new List<Ektron.Cms.Search.SearchResultData>();
            foreach (var result in groupdResults)
            {
                for (int i = 0; i < result.items.Count; i++)
                {
                    SRDATA.Add(result.items[i]);
                }
            }

任何输入作为一个更干净的实现?由于

在Linq查询中分组项目

您可以这样做:

select new 
{ 
    closingDate =statusGroup.Key,
    count= statusGroup.Count(),
    items = statusGroup.ToList()
};

items属性将包含在List中分配给该组的项。

(修改)

我认为你需要一个类来捕获你的结果:

class GroupResult
{
    public string Status { get; set; }
    public ICollection<SearchResultData> Items { get; set; }
}

分组statusGroup是您的项目的IEnumerable,因此您可以执行:

var groupdResults = 
    from result in response.Results
    group result by result[SearchSmartFormProperty.GetStringProperty("/root/DeadlineAltText")] 
    into statusGroup
    select new GroupResult
    { 
        Status =statusGroup.Key,
        Items = statusGroup.ToList()
    }.ToList();

之后,您可以以任何您希望的方式显示Items,例如按Status排序和按ClosingDate排序的Items

但是也许仅仅按状态和然后按截止日期对response.Results进行排序就足够了。

与其使用匿名类型,不如将其放入新对象中。

var groupdResults = 
from result in response.Results
orderby result[SearchSmartFormProperty.GetDateProperty("/root/FundClosingDate")]
group result by result[SearchSmartFormProperty.GetStringProperty("/root/DeadlineAltText")] 
into statusGroup
select new ResultObject
{ 
    closingDate = statusGroup.First().ClosingDate,
    ....
};