簡體   English   中英

Linq使用實體框架進行多對多查詢

[英]Linq query with many to many relations using entity framework

我有兩個表: tbAtbB 。在它們之間,我具有n到n的關系,因此在數據庫中生成了一個表tbAB 我首先使用實體​​框架數據庫,然后在映射這些表時,它不會為tbAB生成特定的實體。 因此,如果我不能直接調用tbAB ,我將看不到如何創建與兩個表相關的查詢。 我想在SQL中做的事情如下:

 SELECT * 
 FROM tbA
 INNER JOIN tbAB 
 ON tbAB.idA = tbA.idA
 INNER JOIN tbB
 ON tbB.idB = tbAB.idB

這就是我要對Linq進行的操作:

  var table = (from l in db.tbA
                                            join k in db.tbB on l.? equals k.?
                                            where ?.IDCONCESSAO == objectTbB.IDCONCESSAO
                                            select l).ToList();

問題是如何在Linq表達式中執行此操作?

提前致謝。

按照@Michal提出的模型,您可以執行以下操作:

var query= from a in db.TableAs
           from b in a.TableBs
           where b.Id==10
           select new{A_Id=a.Id,a.Name, B_Id=b.Id,b.Price,...};

select您可以從兩個實體中選擇所需的屬性(我也從TableA選擇一個Name ,從TableB選擇一個Price ,以幫助您更好地理解此示例)。從關系的各個方向,您永遠不會與聯結表 ,您只需遵循每個方向的關系,就好像是一對多關系一樣。 我上面顯示的查詢將轉換為sql查詢,其中將以這種方式在表之間進行聯接:

{SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[Name] AS [Name], 
[Join1].[Id] AS [Id1], 
[Join1].[Price] AS [Price]
FROM  [dbo].[TableAs] AS [Extent1]
INNER JOIN  (SELECT [Extent2].[TableA_Id] AS [TableA_Id], [Extent3].[Id] AS [Id], [Extent3].[Price] AS [Price]
    FROM  [dbo].[TableBTableAs] AS [Extent2]
    INNER JOIN [dbo].[TableBs] AS [Extent3] ON [Extent3].[Id] = [Extent2].[TableB_Id] ) AS [Join1] ON [Extent1].[Id] = [Join1].[TableA_Id]
WHERE 10 = [Join1].[Id]}
    public void Test()
    {
        var db = new DbContext();

        // This will automatically do you inner join for you.
        db.TableAs.Include(a => a.TableBs);
    }

語境:

    public class DbContext
    {
        public IDbSet<TableA> TableAs { get; set; }
        public IDbSet<TableB> TableBs { get; set; }
    }

楷模:

    public class TableA
    {
        public int Id { get; set; }
        public virtual List<TableB> TableBs { get; set; }
    }
    public class TableB
    {
        public int Id { get; set; }

        public virtual List<TableA> TableAs { get; set; }
    }
  var table = from a in db.tbA
              join ab in db.tbAB on a.idA  equals ab.idA
              join b in db.tbB on ab.idB  equals b.idB
              where a.Anything = 10
              select a;

  var results = table.ToList();      

暫無
暫無

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

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