我有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
就像我需要创建不同的查询集。请帮帮我。
答案 0 :(得分:4)
如果是动态where子句,您可以使用System.Linq.Dynamic
(ScottGu's blog article和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编写的extensions from 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
提供完整代码