2013-03-07 2 views
1

꽤 표준적인 작업이지만 LINQ에 익숙하지는 않습니다. 내 데이터베이스의 테이블에서 정확히 두 개의 행을 필요로하고 지금은 두 개의 별도의 LINQ 쿼리를 사용하고 있습니다 :데이터베이스 테이블에서 두 행을 선택하십시오.

 imageInfo = AppConfigService.All().Where(a =>(a.ConfigProperty == "MaterialImages")).FirstOrDefault(); 
     imageLocation = AppConfigService.All().Where(c => (c.ConfigProperty == "DefaultImagePath")).FirstOrDefault(); 

내가 원하는 것은 내 MaterialImagesimageInfo[1]를 들어, 하나 개의 변수에 imageInfo[0] 같은 것을 정보를 보유하는 것입니다 내 DefaultImagePath 또는 이와 비슷한 내용입니다. LINQ에 대한 지식이 매우 부족하지만 두 쿼리가 필요 없다고 생각합니다.

var imageInfoLocation = 
    (from a in AppConfigService 
    where a.ConfigProperty == "MaterialImages" 
    select cust).Take(1) 
    .Concat(
    (from a in AppConfigService 
    where a.ConfigProperty == "DefaultImagePath" 
    select cust).Take(1)) 
; 
+1

수 하나 개 수집 결과 얻으려면, 당신은 노동 조합의 사용을 만들 수 있습니다 당신은 첫 번째 요소는 두 가지 조건을 만족 목록을 형성 원하는 한 쿼리에서 할 그 수 없습니다 생각 'All' 호출에주의를 기울여야합니다 : 데이터베이스 호출이 아니라'IQueryable' 객체가 아니라면 모든 행을 가져온 다음 메모리에 필터를 걸면됩니다. –

답변

4

당신은 ConcatTake(1) 사용할 수

var res = AppConfigService 
    .All() 
    .Where(a =>(a.ConfigProperty == "MaterialImages" || a.ConfigProperty == "DefaultImagePath")) 
    .GroupBy(a => a.ConfigProperty) 
    .ToDictionary(g => g.Key, g => g.FirstOrDefault()); 

두 개의 항목으로 된 사전은 다시 나타납니다. 하나는 ConfigProperty이고 하나는 해당 속성이있는 첫 번째 또는 기본 항목입니다. "MaterialImages" 또는 "DefaultImagePath"의 소스 행이 없으면 결과에는 두 개 미만의 항목이 포함됩니다. 해당 상수를 키로 사용하여 사전에서 값을 얻을 수 있습니다.

+0

답변을 주셔서 감사 드리며, 귀하의 답변을 받아 들일 것입니다. – Leron

+0

덕분에 눈치 챘지만 여전히 'dasblinkenlight'답변을 원한다고해도 코드를 이해하는 것이 더 쉽습니다. – Leron

-1

,

var rows = AppConfigService.All().Where(a =>(a.ConfigProperty == "MaterialImages" || c.ConfigProperty == "DefaultImagePath")); 
+0

'c'는 어디에서 왔습니까? – dasblinkenlight

+0

이것은 올바르지 않습니다. 당신은'c'를 정의하지 않았고 심지어는 이해가되지 않을 것입니다. – Jobo

+0

남자는 명백하다. 오타가있다. 고려해 보라. – spajce

3

당신은 아래 단일 쿼리를 사용할 수 있지만, 원래 쿼리가 더 읽기입니다 : 당신은 다음을 사용할 수 있습니다

1

난 당신이

var union = imageInfo = AppConfigService.All(). 
    Where(a =>(a.ConfigProperty == "MaterialImages")).FirstOrDefault(). 
    Union(
      AppConfigService.All().Where(c => (c.ConfigProperty == 
             "DefaultImagePath")).FirstOrDefault()); 
관련 문제