我在 .NET CORE 2.2 中有以下代碼。它不適用于 .NET 3.1。根據這篇文章,它說DefaultIfEmpty().Take(1)不會轉換為 SQL。
from students in Students.Where(e => e.StudentType == studentType)
join courseDetails in Course.Where(x => x.IsActive == true)
on students.CourseId equals courseDetails.Id into studentCourse
from courseDetails in studentCourse.DefaultIfEmpty().Take(1)
select new { students, courseDetails };
當我在 LINQ 陳述句上方運行時,出現以下錯誤。
“NavigationExpandingExpressionVisitor”失敗。這可能表示 EF Core 中存在錯誤或限制。有關更多詳細資訊,請參閱 https://go.microsoft.com/fwlink/?linkid=2101433。",
PS:根據我必須使用的要求Take(1)。因為對于左側表中的每條記錄,右側可以有多個記錄。因此我們將只取 1 條記錄。
任何人都可以在不破壞 LINQ 查詢的情況下分享建議
uj5u.com熱心網友回復:
我從不那樣做,我每次都用 First OR Default
from students in Students.Where(e => e.StudentType == studentType)
join courseDetails in Course.Where(x => x.IsActive == true)
on students.CourseId equals courseDetails.Id into studentCourse
from courseDetails in studentCourse.FirstOrDefault()
select new { students, courseDetails };
uj5u.com熱心網友回復:
接下來試試:
var query = from students in Students.AsQueryable().Where(e => e.StudentType == studentType)
from courseDetails in Course.AsQueryable()
.Where(x => x.IsActive == true)
.Where(cd => cd.Id == students.CourseId)
.Take(1)
.DefaultIfEmpty()
select new { students, courseDetails };
我的機器上沒有安裝 3.1,但 5.0 似乎可以正確翻譯它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/372184.html
