我有一個資料庫表 AdvisorComments,其中有 advisorID 和 studentID 以及其他列。同一advisorID 和studentID 可以有多個記錄。此外,advisorID 可以有不同的 studentId,反之亦然。
我有另一個表學生,我只存盤了當前的advisorId,可以更新為不同的顧問。
我想從學生表中獲取特定顧問的所有學生(當前:學生表;以前:顧問評論表)。
這是我嘗試過的:
this.advisorID = 1;
var advisorComments = _context.AdvisorComments.Where(x => x.advisorID == this.advisorID).GroupBy(x=>x.studentID).Select(m => new { m.First().studentID}).ToList();
/* output:
0: studentID 1
1: studentID 4
*/
var studentList = _context.Students.Where(x => x => x.advisorID == this.advisorID || advisorComments.Any(a => a.studentID== x.studentID)).ToList();
/*output:
Getting error
System.InvalidOperationException: 'The LINQ expression 'a => a.studentID == EntityShaperExpression:
Project.Models.Student
ValueBufferExpression:
ProjectionBindingExpression: EmptyProjectionMember
IsNullable: False
.studentID' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to 'AsEnumerable', 'AsAsyncEnumerable', 'ToList', or 'ToListAsync'.
*/
uj5u.com熱心網友回復:
將 advisorComments 宣告為 List 型別并且它正在作業。
List<int> advisorComments = _context.AdvisorComments.Where(x => x.advisorID == this.advisorID).Select(m => studentID).Distinct().ToList();
uj5u.com熱心網友回復:
this.advisorID = 1;
var advisorComments = _context.AdvisorComments
.Where(x => x.advisorID == this.advisorID)
.DistinctBy(z => z.studentID)
.Select(m => new { m.studentID}).ToList();
/* output:
0: studentID 1
1: studentID 4
*/
var studentList = _context.Students
.Where(x => x.advisorID == this.advisorID ||
advisorComments.Any(z => z.studentID == x.studentID))
.ToList();
DistinctBy 不是標準的 linq,而是一個輔助函式——這里是代碼
public static IEnumerable<TSource> DistinctBy<TSource, TKey>
(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> seenKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element)))
{
yield return element;
}
}
}
帽子提示> https://stackoverflow.com/a/489421/215752
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/511425.html
