2011-11-14 2 views
2

두 테이블 사이에 일대 다 관계가 있으며 여러 테이블에서 값을 가져 와서 쉼표로 구분 된 목록을 생성하는 linq 쿼리를 수행하고자합니다 다른 테이블의 각 레코드에 연결된 값에서. "stuff"함수와 "for xml path"함수를 사용하여 sql에서이 쿼리를 수행 할 수 있습니다. , ID, 이름linq을 사용하여 열로 쉼표로 구분 된 목록

이제

가정 districtid 나는를 생성하고 싶었 :

1) 지구
열 : ID, 이름
2) 스토어
열 예를 들어, 나는 다음과 같은 테이블 구조가 있다고 가정 쿼리는 다음 열을 반환합니다. district.id, district.name, stores (쉼표로 구분 된 상점 목록)이 지구와 관련된 매장 목록

linq을 통해 어떻게 달성 할 수 있습니까?

하나의 쿼리에서 for 루프없이이 작업을 수행하고 싶습니다.

답변

5

다른 답변은 탐색 속성이 있다는 점을 고려합니다. 그럴 경우 다른 답변을 살펴 봐야합니다. 그 경우에는 다른 답변이 훨씬 간단하기 때문입니다. 이미 탐색 속성으로 ORM 클래스를 생성 Linq에 - 투 - SQL은 다음이 있어야 사용하는 경우

var q = from d in context.Districts 
select new 
{ 
    DistrictID = d.id, 
    DistrictName = d.name, 
    Stores = String.Join(", ", d.stores.Select(s => s.name)) 
}; 
+0

이 아마 더 간단하지만 데이터가있는 경우 "또는, 그 안에 그것은 작동하지 않습니다 ... (나는 스토어 인해 LINQ의 복수화에 Store_s_ 등으로 전환 된 것으로 추정) 또한 여전히 n 앞뒤의 인용문을 뒤집습니다. –

0

탐색 속성이

var req = from dis in db.Disticts 
      select new { 
         ID = dis.id, 
         Name = dis.Name, 
         Stores = 
         String.Join(", ", 
         dis.Stores.Select(a => String.Format("{0}: {1}", a.Id, a.Name)) 
         }; 
0

다음은 다음 코드를 실행할 수 있습니다 당신을 가정

var result = 
    from d in Districts 
    // gets all the store names in this district 
    let st = Stores.Where(s => s.DistrictId == d.Id).Select(s => s.Name) 
    select new { Name = d.Name, Id = d.Id, Stores = string.Join(",", st) } 
+0

나는 이것을 변형 해 보았습니다. select 문은 Join이 string []을 반환하는 것으로 보이는 IEnumerable을 반환하는 것으로 보입니다. 내가해야 할 일이 더있다. – user927777

+0

String.Join()은 배열이 아닌 "결합 된"단일 문자열을 반환해야합니다 ... 변형을 게시 할 수 있습니까? –

+0

신경 쓰지 마라. 나는 그것을 얻었다. 감사. – user927777