2014-05-21 2 views
2

SELECT * FROM [Source] WHERE [Field] IN [String Array]에 해당하는 람다 linq을 찾을 수 없습니다. 문자열 배열의 우편 번호를 포함하는 데이터 테이블에서 모든 데이터를 선택해야합니다. 나는 이것이 비교적 비효율적이라고 믿는 것처럼 (또는 어쨌든 그것이 될 것이라고 믿는) 모든 행을 반복하는 것보다 빠른 방법을 원합니다. 데이터 테이블에서 람다 LINQ IN 쿼리를 수행하는 방법에 대한 Google의 적절한 답을 찾지 못하는 것 같습니다. 어떤 도움이라도 좋을 것입니다! 작동하지 않는Linq 선택 위치

List<string> lst = dtEtechZipCodeEmailRecipients.AsEnumerable() 
       .Select(o => o.Field<string>("Email")).Distinct().ToList(); 
for (int i = 0; i < lst.Count - 1; ++i) 
{ 
    string email = lst[i].ToString().ToUpper(); 
    string[] zipCodes = dtEtechZipCodeEmailRecipients.AsEnumerable() 
     .Where(zip => (zip.Field<string>("Email") ?? (object)String.Empty).ToString().ToUpper() == email) 
     .Select(zip => zip.Field<string>("ZipCode")).ToArray(); 

    Console.WriteLine(" - " + email); 

    dtEtechModelRequests.AsEnumerable().Where(mod => mod.Field<string>("ZipCode").Contains(zipCodes)).Select(mod => mod); 
} 

에서, .Contains하지만 모든 것이 정확하게 그래도 난 무엇을해야 않습니다 여기에 내가 현재 가지고있는 것입니다. 나는 .Contains을두고 내 요점을 보여 주려고했다.

+0

그래서 모든 우편 번호 목록이 단일 우편 번호에 포함되어 있는지 알고 싶습니다. 말이 돼? 그 우편 번호는 모두 당신이 가지고있는 하나의 우편 번호 안에 존재합니까? – Servy

답변

2

당신은 정반대의 일을해야합니다 - 우편 번호의 배열은 현재의 우편 번호가 포함되어 있는지 여부를 확인 : 배열의 현재 우편 번호 경우 검증과 동일

Where(mod => zipCodes.Contains(mod.Field<string>("ZipCode")) 

합니다. 귀하의 질문에

+0

좋아요, 그럼 결과가 null이면 어떻게 될까요? 그러면 오류가 발생합니다.(); – Volearix

+0

@Volearix 결과가 null입니까? List l = dtEtechModelRequests.AsEnumerable(). (mod => zipCodes.Contains (mod.Field ("ZipCode")) 'zipCodes'는 null 일 수 없습니다. 어떤 오류가 있습니까? –

+0

'{ "값은 null 일 수 없습니다. \ r \ n 매개 변수 이름 : source"}'정확한 오류입니까? – Volearix

0

간단한 대답은

[Source].Where(el => [String Array].Contains(el.Field<string>("Field")) 

입니다 그리고 당신은 NOT IN 필요하면 다음 [String Array]

[Source].Where(el => ![String Array].Contains(el.Field<string>("Field")) 

다른 표현의 ! 뿅 추가 다음과 같은 패턴

에 따라

[Source].Where(el => [String Array].Contains(el.Field<string>("Field")==false)