在c#中查询Linq

时间:2013-12-18 08:09:59

标签: c# .net sql-server asp.net-mvc linq

我要求从table1计算记录,但条件是这样 我不应该计算table1中的foriegn密钥存在于table1中的记录。 我只想要table1中不在table2中的记录数 我想这样做是c#-linq。

假设我有这张表

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的外键是

5 个答案:

答案 0 :(得分:2)

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

Enumerable.Where给出条件为true的序列的所有元素。 如果至少有一个元素满足条件,则Enumerable.Any会生成true。而Enumerable.Count就是:序列中元素的数量。

答案 1 :(得分:1)

也许你可以使用简单的where语句:

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

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

用类替换字符串并替换

cListTwo.Contains(Item) == false

与你的逻辑!

答案 2 :(得分:1)

试试这个:

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

答案 3 :(得分: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

答案 4 :(得分: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();