2013-12-18 4 views
0

У меня есть требование, чтобы подсчитать записи из таблицы1, но условие в том, что Я не должен считать запись из таблицы1, чей ключ foriegn существует в таблице2. Я просто хочу, чтобы количество записей в таблице1 не было в таблице2
Я хочу сделать это C# -linq.Запрос с Linq в C#

Предположим, у меня есть эта таблица

ID   Text    userId 
--   ----    ------ 
1   hi! this is me  5 
2   hey    5 
3   no no    5 

И вторая таблица

pkid  fkId 
----  ----  
5   1   
6   1   
7   1 

Я хочу, чтобы все записи из table1 где USERID = 5, но не записи, которые находятся в table2 с внешним ключом table1

+0

Можете ли вы доказать, что хотите сделать это с помощью Linq? –

ответ

2
var result = table1 
      .Where(x => x.userId == 5 && !table2 
              .Any(y => y.fkId == x.ID)) 
      .Count(); 

Enumerable.Where содержит все элементы последовательности, для которых conditi on is true. Enumerable.Any приводит к true, если существует хотя бы один элемент, удовлетворяющий условию. И Enumerable.Count - это просто: количество элементов в последовательности.

+0

отличный ответ. thnak You – Sweetie

+0

Не могли бы вы рассказать мне еще одну ситуацию, и это наоборот. Теперь я хочу получить только записи из таблицы 1, чья pkId существует в таблице2 как fkid – Sweetie

+1

Просто удалите '!'. – germi

1

Может быть, вы можете использовать простой где-заявление:

IList<string> cListOne = null; 
IList<string> cListTwo = null; 

IList<string> cListThree = cListOne.Where(Item => cListTwo.Contains(Item) == false).ToList(); 

Простой заменить строку с классом и заменить логику на

cListTwo.Contains(Item) == false 

с вашим!

1

Попробуйте это:

table1.Count(x => !table2.Any(y => y.id == x.id)); 
1

Так у вас есть таблицы, как эти

Table 1  Table2 
-------  ------ 
x  1  1 
x  2  2 
x  3  3 
x null  4 

Чтобы сосчитать вы могли бы использовать этот

var count = db.Table1.Count(t1 => !db.table2.Any(t2 => t1.TID == t2.ID)) 

Граф все из таблицы 1, где внешний ключ не в первичном ключе в таблице 2.

См. Count Method.

1
var count = (from c in db.Table1 where c.userId == 5 && !(from o in db.Table2 select o.fkId).Contains(c.ID) select c).Count(); 
+0

Пожалуйста, уточните мой обновленный код – Sweetie

Смежные вопросы