4

我有 3 个数据表ab; 和c。在这我需要使用LINQ动态地编写 Join Query 。

客户给定的选择列和条件列也在运行时给定客户。

所以我需要动态创建查询。请检查以下示例。因为我不知道他们想要哪个表以及哪个列

例如

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

就像我需要创建不同的查询集。请帮助我。

4

1 回答 1

3

在动态 where 子句的情况下,您可以使用任一System.Linq.Dynamic( ScottGu的博客文章nuget ):

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");

或者使用@joe-albahari 编写的扩展PredicateBuilder动态构建表达式。例如:

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 获得

于 2012-12-17T18:02:10.773 回答