簡體   English   中英

在Linq C#中動態進行多表聯接

[英]Multiple Table Join in Linq C# Dynamically

我有3個數據表: a ; b ; 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

就像我需要創建不同的查詢集。 請幫我。

如果使用動態where子句,則可以使用System.Linq.DynamicScottGu 的博客文章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上找到

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM