[英]Converting Sql query with 2 “left Join” and multi conditions to entity framework query
我試圖轉換此SQL查詢
Select *
from (
select SenDa.*,Prod.ProductKHK,FCod.FailCodeDesc
from databa.dbo.SensorData as SenDa
left join Products as Prod on SenDa.ProductID = Prod.ProductID
left join FailCodes as FCod on SenDa.FailCode = FCod.FailCode and (FCod.ProdLineID =0 or FCod.ProdLineID = FCod.ProdLineID)
) as SenDa
到SQL Linq所以:
var SensDatJoinFail = (from SensDat in Jas_en.SenDatas
join Prod in Jas_en.Products on
SensDat.ProductID equals Prod.ProductID
join FCod in Jas_en.FailCodes on SensDat.FailCode equals FCod.FailCode1
where FCod.ProdLineID == 0 || FCod.ProdLineID == FCod.ProdLineID
select new
{
Serial_No = SensDat.Serial_No,
OrderID = SensDat.OrderID,
Artikelnummer = Prod.ProductKHK,
StartProcTime = SensDat.StartProcTime,
EndProcTime = SensDat.EndProcTime,
Packaged = SensDat.Packaged,
Labeled = SensDat.Labeled,
Reworked = SensDat.Reworked,
LastStation = SensDat.LastStation,
FailCode = SensDat.FailCode,
FailCodeDesc = FCod.FailCodeDesc,
});
但是我在行數查詢的結果上有所不同
我不知道,問題出在哪里?
這是一個EF常見問題解答。 不要在LINQ中使用JOINS進行實體訪問。 只需瀏覽您的導航屬性。 就像是:
from SensDat in Jas_en.SenDatas
select new
{
Serial_No = SensDat.Serial_No,
OrderID = SensDat.OrderID,
Artikelnummer = SensDat.Product.ProductKHK,
StartProcTime = SensDat.StartProcTime,
EndProcTime = SensDat.EndProcTime,
Packaged = SensDat.Packaged,
Labeled = SensDat.Labeled,
Reworked = SensDat.Reworked,
LastStation = SensDat.LastStation,
FailCode = SensDat.FailCode,
FailCodeDesc = SensDat.FailCode.FailCodeDesc,
});
您得到的行較少,因為您使用的是內部聯接的左聯接。 嘗試這樣的事情:
var result= from table1 in dbo.Table1
from table2 in dbo.Table2
.Where(i=>i.Id == table1.Id)
.DefaultIfEmpty();
或者您可以看一下如何執行左外部聯接
Person magnus = new Person { FirstName = "Magnus", LastName = "Hedlund" };
Person terry = new Person { FirstName = "Terry", LastName = "Adams" };
Person charlotte = new Person { FirstName = "Charlotte", LastName = "Weiss" };
Person arlene = new Person { FirstName = "Arlene", LastName = "Huff" };
Pet barley = new Pet { Name = "Barley", Owner = terry };
Pet boots = new Pet { Name = "Boots", Owner = terry };
Pet whiskers = new Pet { Name = "Whiskers", Owner = charlotte };
Pet bluemoon = new Pet { Name = "Blue Moon", Owner = terry };
Pet daisy = new Pet { Name = "Daisy", Owner = magnus };
// Create two lists.
List<Person> people = new List<Person> { magnus, terry, charlotte, arlene };
List<Pet> pets = new List<Pet> { barley, boots, whiskers, bluemoon, daisy };
var query = from person in people
join pet in pets on person equals pet.Owner into gj
from subpet in gj.DefaultIfEmpty()
select new { person.FirstName, PetName = subpet?.Name ?? String.Empty };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.