2012-12-17 3 views
2

나는 3 데이터 테이블 : a; b; 및 c. 이 내에서 LINQ을 사용하여 동적으로 조인 쿼리를 작성해야합니다.여러 테이블 조인 Linq C#에서 동적으로

런타임에 고객에게 주어진 열 선택 및 조건 열 또한 고객에게 제공됩니다.

그래서 동적으로 쿼리를 만들어야합니다. 아래 예를 확인하십시오. 나는 쿼리의 다른 세트를 만들 필요가 같이 그들이 예를

Select a.c1,a.c2,b.c1,b.c2 From a Left Join b on a.c1=b.c1 

Select c.c1,c.c2,a.c1,a.c2 From c Left Join a on c.c3=a.c1 

Select a.c1,a.c2,b.c1,b.c2,c.c1,c.c2 From a Left Join b on a.c2=b.c2 Left join c on c.c1=a.c1 

들어있는도

열을 원하고 어떤 테이블 모르기 때문에. 이것 좀 도와주세요. 이 @ 조 - albahari에 의해 writen extensions from PredicateBuilder 사용하여 표현을 구축 dynamicaly

var results = (from fruit in fruits 
    join car in cars on fruit.Id equals car.Id 
    select new { fruit, car }) 
    .AsQueryable() 
    .Where("fruit.ColA != car.ColA") 
    .Where("fruit.ColB == car.ColB"); 

을 또는 :

+0

에서의 풀 코드 나는 bb.c1 동일 aa.c1에 B의 BB를 조인 \t \t에 AA에서 = VAR 쿼리 아래와 같은 정적 쿼리를 작성할 수 있습니다 \t \t select new {aa.Name, bb.Product}; 하지만 내가 원하는 것은 동적으로 테이블과 컬럼을 기반으로하는 쿼리 위에 작성하는 것이고, 그 방법은 잘 모른다. 나를 도와 준다. – kmkperumal

+1

@kmkperumal a b와 c는 끔찍한 예이며 읽는 것을 정말 어렵게 만듭니다. 비록 어리석은 사람이라 할지라도 실명으로 예제를 만들 수 없습니까? akim의 과일과 차가있는 예를보십시오. – ANeves

답변

4

당신은 동적 where 절의 경우 System.Linq.Dynamic (ScottGu's blog articlenuget) 중 하나를 사용할 수 있습니다.

var predicate = 
    PredicateBuilder 
     .True<Tuple<Product, Product>>() 
     .And(t => t.Item1.ColA != t.Item2.ColA) 
     .And(t => t.Item1.ColB == t.Item2.ColB) 
     .Compile();  

(from fruit in fruits 
    join car in cars on fruit.Id equals car.Id 
    select Tuple.Create(fruit, car)) 
    .Where(predicate) 
    .Dump(); 

PS : 예를 들어 gisthub

+2

"동적 결합"을 수행하지 않습니다. fruit.ID는 car와 동일합니다. ID는 하드 코드되며 런타임 중에 변경할 수 없습니다. – Igor