在Linq查询中对项目进行分组

时间:2013-04-03 10:17:56

标签: c# linq

我正在尝试对ektron搜索结果项的结果集进行分组并将其输出到屏幕上,我使用以下代码

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 = groupdResults;

我遇到的问题是我需要输出结果集中的所有数据,例如title,closingdate等。,它目前仅输出,例如 结束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]);
                }
            }

关于更清洁实施的任何输入? 感谢

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

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

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

答案 1 :(得分:0)

我不会使用匿名类型,而是将其放入新对象中。

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,
    ....
};

答案 2 :(得分:0)

(修改)

我认为您需要一个班级来捕捉您的结果:

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排序,ItemsClosingDate排序。

但也许只需按状态排序response.Results然后按截止日期排序。