[英]Linq query with many to many relations using entity framework
我有兩個表: tbA
和tbB
。在它們之間,我具有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.