Member 12794125 Ответов: 1

Нужен запрос linq для сложной ситуации


Привет, у меня есть сценарий. Мой стол состоит из трех колов. Для каждой записи должно быть две строки с разным идентификатором типа.

GrpId    type id       entryID
------------------------------
10         1           1
-1         2           1
11         1           2
12         2           2
10         1           3
-1         2           3
10         1           4
-1         2           4
23         1           5
-1         2           5
24         1           6
-1         2           6
10         1           7
-1         2           7
10         1           8
-1         2           8


Мне нужен один запрос linq
У меня есть два условия
когда идентификатор типа должен быть 1, а grpid - 10, получите идентификатор записи
результат должен быть за это идентификатор записи мне нужен стеклопластик ИД-1 и ИД тип 2

Результат должен быть:

GrpId    type id       entryID
------------------------------
-1         2           1
-1         2           3
-1         2           4
-1         2           7
-1         2           8


Что я уже пробовал:

Я попробовал сгруппироваться и кое где еще но ничего не вышло

Member 12794125

Спасибо тебе, Мацей Лос.
Можно ли это сделать в одном запросе

1 Ответов

Рейтинг:
5

Maciej Los

Взгляните на пример:

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("GrpId", typeof(int)));
dt.Columns.Add(new DataColumn("type id", typeof(int)));
dt.Columns.Add(new DataColumn("entryID", typeof(int)));

dt.Rows.Add(new object[]{10, 1, 1});
dt.Rows.Add(new object[]{-1, 2, 1});
dt.Rows.Add(new object[]{11, 1, 2});
dt.Rows.Add(new object[]{12, 2, 2});
dt.Rows.Add(new object[]{10, 1, 3});
dt.Rows.Add(new object[]{-1, 2, 3});
dt.Rows.Add(new object[]{10, 1, 4});
dt.Rows.Add(new object[]{-1, 2, 4});
dt.Rows.Add(new object[]{23, 1, 5});
dt.Rows.Add(new object[]{-1, 2, 5});
dt.Rows.Add(new object[]{24, 1, 6});
dt.Rows.Add(new object[]{-1, 2, 6});
dt.Rows.Add(new object[]{10, 1, 7});
dt.Rows.Add(new object[]{-1, 2, 7});
dt.Rows.Add(new object[]{10, 1, 8});
dt.Rows.Add(new object[]{-1, 2, 8});

//get entries
var entries = dt.AsEnumerable()
	.Where(x=>x.Field<int>("GrpId")==10)
	.Select(x=>x.Field<int>("entryID"))
	.ToList();
//get result
var result = dt.AsEnumerable()
	.Where(x=> x.Field<int>("GrpId")==-1 && 
			x.Field<int>("type id")==2 && 
			entries.Any(y=>y==x.Field<int>("entryID")))
	.ToList();


Удачи!