簡體   English   中英

C# LINQ 到 SQL - 一對多關系

[英]C# LINQ to SQL - one to many relationship

我在 LINQ 中創建此查詢時遇到問題:

USE Northwind
GO

SELECT emp.FirstName, emp.LastName, tr.TerritoryDescription, reg.RegionDescription
FROM Employees emp
INNER JOIN EmployeeTerritories empt ON empt.EmployeeID = emp.EmployeeID
INNER JOIN Territories tr ON tr.TerritoryID = empt.TerritoryID
INNER JOIN Region reg ON reg.RegionID = tr.RegionID

這是我目前的創作:

var query = await context
                .Employees
                .Select(x => new
                {
                    x.FirstName,
                    x.LastName,
                    TerritoryId = x.EmployeeTerritories. //cannot access properties
                })
                .ToListAsync();

但我不能輕易訪問EmployeeTerritories屬性,因為它不是 1:1 的關系。 我接受這個問題的線索和完整的解決方案。

編輯

所以這就是我目前擁有的:

            var query = await context
            .Employees
            .Select(x => new
            {
                x.FirstName,
                x.LastName,
                TerritoryDescription = x.EmployeeTerritories
                    .Select(et => et.Territory.TerritoryDescription)
                    .ToList(),
                RegionDesicription = x.EmployeeTerritories
                    .Select(et => et.Territory.Region.RegionDescription)
                    .ToList()
            })
            .ToListAsync();

有沒有辦法優化它? RegionDescription現在是一個包含一個元素的list ,但我不知道如何以更好的方式做到這一點。

嘗試這樣的事情(假設你有對應的關系):

var query = await context
            .Employees
            .Select(x => new
            {
                x.Employee.FirstName,
                x.Employee.LastName,
                TerritoryDescription = x.EmployeeTerritories
                    .Select(et => et.Territory.TerritoryDescription)
                    .ToList(),
            })
            .ToListAsync();

UPD

要在您的特定情況下變平,您可以使用@dhrumil shah發布的解決方案(它更通用)或嘗試類似的方法,如果您在上下文中設置了EmployeeTerritories

var query = await context
            .EmployeeTerritories
            .Select(et => new
                    {
                        et.Employee.FirstName,
                        et.Employee.LastName,
                        et.Territory.TerritoryDescription,
                        et.Territory.Region.RegionDescription
                    })
            .ToListAsync();
(from emp in context.Employees 

 join empt in context.EmployeeTerritories 
 on emp.EmployeeID equals empt.EmployeeID
 
 join tr in context.EmployeeTerritories 
 on empt.TerritoryID equals tr.EmployeeID 
 
 join reg in context.Region 
 on reg.RegionID equals tr.RegionID 
 
 select new { 
 emp.FirstName, 
 emp.LastName, 
 tr.TerritoryDescription, 
 reg.RegionDescription
 }).ToList(); 

暫無
暫無

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

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