2014-05-20 8 views
0

LINQ를 사용하여 어떻게 문자열 배열의 것들을 제외한 모든 상태를 반환하도록이 쿼리를 구합니까?LINQ 문자열 배열이 없습니다.

string[] states = { "FL", "CA", "IN", "AL", "MI" }; 
var headers = (from h in db.Headers 
       where h.State != states.Any() 
       select new 
       { 
        description = h.Description, 
        state = h.State 
       }); 
+0

Christo의 대답은 정확합니다. Selman 's 역시 효과가 있습니다. 그러나 조금만 설명하면 LINQ 확장의 반환 값을 살펴 봐야합니다. 예를 들어,'Any()'는'bool' 타입을 반환합니다. 여러분은'h.State' (아마도 문자열)과'bool'을 비교하려고합니다. –

답변

5

당신이 시도 할 수 :

var headers = (from h in db.Headers 
       where !states.Contains(h.State) 
       select new 
       { 
        description = h.Description, 
        state = h.State 
       }); 
+1

나는 당신을 사랑하고 미워합니다. 이 질문에 신속하게 답변 해 주셔서 감사 드리며 신속하게 답변 해 주셔서 싫어합니다. 이제는 바보 같이 느껴집니다. LOL – scripter78

+0

@ scripter78 당신은 바보 같은 기분을 느껴서는 안됩니다. 나는 당신이 너무 많은 LINQ를 사용하지 않았다고 가정합니다. LINQ를 많이 사용했다면, 그것은 첫 번째 생각 중 하나 였을 것입니다. 당신은 질문이 잘 형성되어 있고, 당신이 원했던 것은 매우 명확합니다. 둘 다 당신의 대답이 매우 빨리 대답되도록 도왔습니다. – Christos

+0

나는 그것이 Contains와 관련이 있다는 것을 알았고 그것을 시작하려고 시도했지만 어떻게 그 순간에 내가 기억할 수없는 것을 가지고 있었는지, 작동하지 않을 것입니다. 그것은 당신의 솔루션보다 훨씬 정교했습니다. 그것이 내가 항상 떠나야 할 한 가지입니다. 내 솔루션이 내가 아는 것보다 너무 정교 해지면 나는 잘못된 것을하고있다. 나는 Linq를 사용하지만, 여기 시나리오에서는 사용하지 않아도된다. 그럼에도 불구하고 고마워요. 저에게 저에게 많은 시간과 두통이 저축되었습니다. – scripter78

1

은 아마 당신이 Contains를 사용해야가 SQL으로 NOT IN로 번역되기 때문에 그러나 이것은 당신이 Any 함께 할 수있는 방법이다, 그것은 NOT EXISTS로 번역되어야한다 :

var headers = (from h in db.Headers 
       where !states.Any(x => x == h.State) 
       select new 
        { 
         description = h.Description, 
         state = h.State 
        });