C# Linq C中的多表动态连接

C# Linq C中的多表动态连接,c#,sql,linq,C#,Sql,Linq,我有3个数据表:a;B和c。在本文中,我需要使用LINQ动态编写连接查询 客户提供的选择列和条件列在运行时也提供给客户 所以我需要动态地创建查询。请检查下面的示例。因为我不知道他们想要哪个表,也不知道他们想要哪个列 比如说 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

我有3个数据表:a;B和c。在本文中,我需要使用LINQ动态编写连接查询

客户提供的选择列和条件列在运行时也提供给客户

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

比如说

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
就像我需要创建不同的查询集一样。请在这方面帮助我。

您可以使用System.Linq.Dynamic,如果是Dynamic where子句:

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编写的动态构建表达式。例如:

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:完整代码可在

上获得,我可以编写如下的静态查询var query=from aa in a join bb in b on aa.c1 equals bb.c1 select new{aa.Name,bb.Product};但是我想要的是基于表和列动态地编写上面的查询,只有我不知道怎么做。请帮助我。@kmkperumal a b和c是可怕的例子,让人很难读懂。。。你不能用现实生活中的名字做个例子,即使它们很傻吗?请参见akim的水果和汽车示例。您是如何解决此问题的?我面临同样的情况,这不是动态连接。fruit.ID等于car.ID是硬编码的,不能在运行时更改。