2013-08-10 2 views
-3

Чтобы выбрать элементы, принадлежащие определенной группе в таблице, если элементы и их тип группы содержатся в одной таблице, а все типы групп перечислены в другой таблице, мы выполняем деление на таблицы. Я пытаюсь выполнить запрос LINQ для выполнения той же операции. Скажите, пожалуйста, как я могу это сделать?Что оператор LINQ выполняет операцию разделения на таблицах?

+1

непонятно, что вы пытаетесь сделать и что уже сделали. Приведите пример своего кода или объясните немного больше. – Pleun

+0

@Pleun depeteror в реляционных базах данных, как описано в http://sajidzaman.com/2010/12/16/division-operator-in-relational-databases/ –

+1

@MaruthiRevankar: Почему мы должны читать сообщение в блоге, чтобы понять свой вопрос? Пожалуйста, отредактируйте его, чтобы сделать его более ясным. Благодарю. – stakx

ответ

1

По-видимому, из определения того блога, которое вы хотели бы пересечь и исключить.

Table1.Except(Table1.Intersect(Table2)); 

или, вернее, в вашем случае я бы догадаться

Table1.Where(d => !Table2.Any(t => t.Type == d.Type)); 

не так уж трудно.

Я не думаю, что производительность может быть сделана намного лучше, на самом деле. Может быть, с группой.

Table1.GroupBy(t => t.Type).Where(g => !Table2.Any(t => t.Type == g.Key)).SelectMany(g => g); 

Это должно быть лучше для работы. Выполняет поиск только во второй таблице для каждого типа типа один раз, а не для каждой строки в таблице1.

0

Трудно точно определить, что вы просите. Но, похоже, вы хотите определить элементы, которые являются общими в двух таблицах или потоках. Если это так, я думаю, вам нужен Intersect.

Take a look here

Это что-то вроде это работает:

int[] array1 = { 1, 2, 3 }; 
int[] array2 = { 2, 3, 4 }; 
var intersect = array1.Intersect(array2); 

Возвращает 2 и 3.

Противоположностью этого будет исключением().

+0

[Это не то, что имеет реляционное разделение.] (Https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/) –

+0

Правильно, но кажется, что он хочет достичь. –