2010-04-16 3 views
1

제목을보다 정확하게 표현할 수 없으니 실례합니다.LINQ to SQL : 속성에 대해 다시 사용할 수있는 식?

기본적으로 테이블에 연결된 3 개의 LINQ 개체가 있습니다. 하나는 Product이고 다른 하나는 Company이며, 마지막은 매핑 테이블입니다. Company가 판매하는 제품과이 회사가이 제품을 가리키는 ID를 저장하는 매핑입니다. 지금은 제품의 목록을 검색하고

다음과 같이

var options = new DataLoadOptions(); 
options.LoadWith<Product>(p => p.Mappings); 
context.LoadOptions = options; 

var products = (
    from p in context.Products 
    select new { 
     ProductID = p.ProductID, 
     //BackendProductID = p.BackendProductID, 
     BackendProductID = (p.Mappings.Count == 0) 
      ? "None" 
      : (p.Mappings.Count > 1) 
       ? "Multiple" 
       : p.Mappings.First().BackendProductID, 
     Description = p.Description 
    } 
).ToList(); 

이 내가 원하는 정보를 검색하는 하나의 쿼리를 수행합니다. 하지만 나는 BackendProductID 뒤에있는 로직을 LINQ 객체로 옮기고 싶다. 그래서 깔끔하고 중첩 된 3 진 연산자 문 대신에 주석 처리 된 행을 사용하여 깔끔함과 재사용 가능성을 높일 수있다.

그래서 나는 제품 객체에 다음과 같은 속성을 추가 :

public string BackendProductID 
{ 
    get 
    { 
     if (Mappings.Count == 0) return "None"; 
     if (Mappings.Count > 1) return "Multiple"; 
     return Mappings.First().BackendProductID; 
    } 
} 

목록은 여전히 ​​동일하지만 지금은 BackendProductID이다 얻기 위해 모든 단일 제품에 대한 쿼리를 수행합니다. 코드가 깨끗하고 재사용 가능하지만 성능은 이제 끔찍합니다.

내가 필요로하는 것은 Expression이나 Delegate의 일종이지만 필자는 필자가 글쓰기를 할 때 머리를 쓸 수 없었다. 항상 모든 단일 제품에 대한 쿼리를 종료했습니다.

도움이 될 것입니다.

답변

1

나는 당신에게 당신보다 더 나은 솔루션을 제공 할 수는 없지만 해결 방법으로 ...

은 어쩌면 당신은 데이터베이스에보기를 만들 수 있습니다, 당신은 당신이 일반적으로처럼 디자이너에 뷰를 드래그 할 수 있습니다 테이블. 보기에서 데이터를 읽을 수 있습니다. 나는 그것이 성과를 향상시킬 것이라고 생각한다.

행운을 비네.