我要求从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的外键是
答案 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();