2013-12-18 3 views
0

테이블 1에서 레코드를 계산할 필요가 있지만 조건은 입니다. 테이블 2에 foriegn 키가있는 레코드를 계산해서는 안됩니다. table2에없는 table1의 레코드 수를 원합니다.
저는 이것을 C# -linq로하고 싶습니다.Linq with 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 

내가 표에서 모든 레코드를 원하는 위치에 표

의 외래 키와 표 2에 userId를 = 5 개가 아니라 기록
+0

Linq와 함께하고 싶다는 것을 증명할 수 있습니까? –

답변

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

Enumerable.Where은 conditi 에 true입니다. Enumerable.Any은 조건을 만족하는 요소가 하나 이상 있으면 true이됩니다. 그리고 Enumerable.Count은 시퀀스의 요소 수입니다.

+0

위대한 답. thnak You – Sweetie

+0

한 가지 더 상황을 말해 주시겠습니까? 그 반대입니다. 이제 테이블 2의 pkId가 fkid로 존재하는 테이블 1의 레코드 만 가져 오려고합니다. – 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

그래서 당신이 외부 키가 어디 있는지 모든 표 1에서이

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

카운트를 사용할 수 계산이

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

같은 테이블이 테이블 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