[英]How do I mimic a SQL Outer Apply in Linq using Entity Framework?
我想使用 linq 模仿 SQL OUTER APPLY
。
我有 2 個表:Main 和 Sub
SQL 看起來像這樣:
select
M.Id, M.Number, M.Stuff, SD.SubName
from
Main as M
outer apply (
select top 1 SubName
from Sub S
where M.Id = S.Id and M.Number = S.Number
) as SD
基於這里和其他地方的答案,比如這個,我嘗試了太多的 Linq 迭代,但這里有一個:
var query1 =
from m in dbContext.Main
join s in dbContext.Sub on new {m.Id, m.Number} equals new {s.Id, s.Number} into subs
select new
{
m,
SubName = subs.FirstOrDefault().SubName
}
這編譯得很好,但是當我運行它時,我得到了這個異常:
Processing of the LINQ expression 'DbSet<Main>
// EF's attempt to translate my query
'NavigationExpandingExpressionVisitor' failed. This may indicate either a bug or a limitation in EF Core. See https://go.microsoft.com/fwlink/?linkid=2101433 for more detailed information.
和堆棧跟蹤。
有沒有人對如何正確編碼 go 有任何建議?
我正在針對 SQL Server 2017 運行 .NET 核心 3.1。
嘗試以下查詢。 EF Core 3.1,應將其轉換為 Outer Appply,但更高版本可能使用JOIN
和ROW_NUMBER
var query1 =
from m in dbContext.Main
from s in dbContext.Sub
.Where(s => m.Id == s.Id && m.Number == s.Number)
.Take(1)
.DefaultIfEmpty()
select new
{
m,
SubName = s.SubName
}
或者這個變種:
var query1 =
from m in dbContext.Main
select new
{
m,
SubName = dbContext.Sub
.Where(s => m.Id == s.Id && m.Number == s.Number)
.Select(s => s.SubName)
.FirstOrDefaut()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.