2013-12-18 39 views
0

我有一個要求來計算來自table1的記錄,但條件是 我不應該計數table1中的foriegn關鍵字存在的記錄。 我只想要table1中的記錄數不在表2中
我想要做的是c#-linq。用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 

我想從表1中的所有記錄其中userid = 5個,但不是都符合表1

的外鍵表2中的記錄
+0

你能證明你想用Linq做到這一點嗎? –

回答

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

Enumerable.Where給出了序列的所有元素,其條件上是trueEnumerable.Any結果在true如果有至少一個元素滿足條件。而Enumerable.Count就是這樣的:序列中元素的數量。

+0

很好的答案。 thnak你 – Sweetie

+0

你能告訴我一個更多的情況,這是相反的。現在我只想從表1中的pkId存在的那些記錄作爲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