2013-04-03 7 views
0

Я пытаюсь группу результирующий набор поисковых результатов Ektron элементов и вывести их на экран, я использую следующий кодГруппировка элементов в Linq запрос

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, closedate и т. д. В настоящее время он выводится только, например. Закрытие 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]); 
       } 
      } 

Любой вклад в более чистую реализацию? спасибо

+0

statusGroup.First(). ClosingDate? – nik0lias

ответ

0

(Modified)

Я думаю, вам нужен класс, чтобы захватить ваши результаты:

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 и Items сортировать по d на ClosingDate.

Но, возможно, этого достаточно, чтобы просто сортировать response.Results по статусу и затем по дата закрытия.

+0

Спасибо за ответы, на этот код "items = statusGroup.Select (g => new {g.title, g.closingdate, ...})" Я пытаюсь получить, например, результат [SearchSmartFormProperty.GetDateProperty ("/ root/FundClosingDate")] элемент обратно в «.Select», любые идеи? –

+0

Тогда вы придете к ответу Марцина Джурашека. –

+0

спасибо за то, что указали мне в правильном направлении, почти там :) У меня есть вывод контента, поместив элементы из marcins в новый список, единственная проблема в том, что я не могу вывести все элементы. Я сделал следующее, но я знаю. Сначала неправильно, что я ставил вместо того, чтобы сначала выводить все элементы? Список SRDATA = новый список (); foreach (var result in groupdResults) { SRDATA.Add (результат.элементы.Первый()); } –

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

Вы можете сделать следующее:

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

items свойство будет содержать элементы, которые назначены для этой группы в List.