Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Помогите написать LINQ запрос. / 3 сообщений из 3, страница 1 из 1
09.04.2009, 12:24
    #35922296
sorcen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать LINQ запрос.
Есть два класса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class RecordItem
{
  public int Year { get; set; }
  public List<int> Monthes { get; set; }
}

public class Record
{
  private List<RecordItem> recordItems;
}

Задача объеденить с помощью LINQ два списка List<Record>:
Список 1:Year = 2008, Monthes = {1,2}
Year = 2009, Monthes = {6,7}
Список 2:Year = 2009, Monthes = {7,8}
Year = 2010, Monthes = {1,3,4}
Необходимо получить:
Year = 2008, Monthes = {1,2}
Year = 2009, Monthes = {6,7,8}
Year = 2010, Monthes = {1,3,4}
...
Рейтинг: 0 / 0
09.04.2009, 14:27
    #35922791
sorcen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать LINQ запрос.
Нашел такое решение:
Код: plaintext
1.
2.
3.
resultList = records1.recordItems.Union(records2.recordItems).
                GroupBy(c => c.Year, i => i.Monthes, 
                        (a, b) => new RecordItem(a, b.SelectMany(c => c).Distinct().ToList())
                       ).ToList();

Может кто-то лучше предложит?
...
Рейтинг: 0 / 0
09.04.2009, 15:19
    #35922979
gp
gp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать LINQ запрос.
Вот - более общий случай аггрегатного объекта для списка

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
public class RecordItem
		{
			public int Year { get; set; }
			public List<int> Monthes { get; set; }
		}

		public class Record
		{

			public IList<RecordItem> recordItems { get; private set; }
			public Record(IEnumerable<RecordItem> items)
			{
				recordItems = items.ToList();
			}
			public static IEnumerable<RecordItem> getAggregatedRecords(IEnumerable<Record> records)
			{
				var q =
					from g in (
						from i in (from r in records
						from i in r.recordItems
						select i)
					group i by i.Year
					)
					select new RecordItem(){
						Year = g.Key,
						Monthes = (
								from items in g
								from m in items.Monthes
								select m)
							.Distinct()
							.ToList()
					};
				return q;

			}
			public Record(IEnumerable<Record> records)
			{
				recordItems = getAggregatedRecords(records).ToList();
			}
		}

		[TestMethod]
		public void TestMethod1()
		{
			var records = new Record(
				new [] {
					new Record(new List<RecordItem>{
						new RecordItem{ Year = 2008, Monthes = new List<int>{1,2} },
						new RecordItem{ Year = 2009, Monthes = new List<int>{6,7} }
					}),
 
					new Record(new List<RecordItem> {
						new RecordItem{ Year = 2009, Monthes = new List<int>{7,8}},
						new RecordItem{ Year = 2010, Monthes = new List<int>{1,3,4}}
					})
				});
		}

нет дурацких вопросов, есть дурацкие ответы
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Помогите написать LINQ запрос. / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]