2009-05-21 2 views
2

를이 내 정적 쿼리내가 동적 LINQ이 할 수 또는 더 좋은 방법이있다 - Linq에, C#을, VS2008

내가 동적 Linq를보고 있었다 그리고 내 느낌을 확장하려고
var results = from v in users 
       join d in orders on v.UserId equals d.UserId 
       join p in Products on d.ProductId equals p.ProductId 
       where v.UserName.Contains(UserName) 
       where v.FirstName.Equals(FirstName) 
       where v.ZipCity.Equals(ZipCity) 
       where v.OrderDate >= OrderDate && v.OrderDate < OrderDate 
       where p.ProductName.Equals(ProductName) 
       select v.Email, v.ShippingCity, v.TrackingNo; 

입니다. 위의 쿼리는 제품 이름이 입력 매개 변수에 널 (null)이 아닌 경우에만 제품 표에 가입, 내가 동적 Linq를 사용하여이 작업을 수행 할 수

GetOrder(string UserName, string FirstName, string ZipCity, DateTime OrderDate, ProductName) 

라는 방법인가?

것은 내가이 http://blog.bvsoftware.com/post/2008/02/27/How-to-create-a-Dynamic-LINQ-Query-Programmatically.aspx

답변

1

나는이 질문에 대한 준 대답에서보세요 다음되었습니다

Best Practices for Building a Search App?

+0

Jason, 입력 매개 변수에 따라 다른 테이블에서 조인을 처리하는 방법은 무엇입니까? – user38230

+0

각 테이블 유형에서 확장 메소드를 생성 할 수 있습니다. 그런 다음 해당 테이블에 필터를 적용 할 수 있습니다. 그래서 당신은 table1.Filter() join table2.Filter()에서 쿼리를 가질 수 있습니다. – CodeLikeBeaker

2

내가 대신 동적 LINQ의는 IEnumerable에 확장 방법을 사용하는 거라고 생각합니다.

var result = from v in users 
      join d in orders on v.UserId equals d.UserId 
      where v.UserName.Contains(UserName) 
      where v.FirstName.Equals(FirstName) 
      where v.ZipCity.Equals(ZipCity) 
      where v.OrderDate >= OrderDate && v.OrderDate < OrderDate 
      select v.Email, v.ShippingCity, v.TrackingNo, d.ProductId; 

if (!string.IsNullOrEmpty(ProductName)) 
{ 
    result = result.Join(Products.Where(p=> p.ProductName == ProductName), 
         d => d.ProductId, 
         p => p.ProductId, 
         (d,p) => new 
            { 
             d.Email, 
             d.ShippingCity, 
             d.TrackingNo 
            }); 
} 
관련 문제