目前,我有一個LINQ聲明實體框架的核心拋出一個警告:System.InvalidOperationException: Warning as error exception for warning 'RelationalEventId.QueryClientEvaluationWarning': The LINQ expression '(Invoke(__selector_0, [x]).ToString() == __value_1)' could not be translated and will be evaluated locally.
如何避免使用複雜LINQ的EF Core中的RelationalEventId.QueryClientEvaluationWarning?
我已經在數據庫上下文初始化把這個「扔警告爲例外」執行寫作LINQ到服務器端的評估。
public async Task<int?> ExistsAsync<TValue>(TestModel entity, Func<TestModel, TValue> selector)
{
var value = selector(entity).ToString();
var test = await _context.TestModel.Where(x => selector(x).ToString() == value).Select(x => x.Id).FirstOrDefaultAsync();
return test;
}
上述語句以下面的方式使用。
var id = await _service.ExistsAsync(new TestModel {Name = name}, x => x.Name);
有沒有辦法讓這個轉換到TSQL和評估在服務器端?使用System.Linq.Expressions
?
編輯:跟進質詢,下面我answer,這裏是不錯的學習資源System.Linq.Expressions
?我很瞭解基本的LINQ,但是當涉及到構建表達樹的時候,我不知道該去哪裏。
歡迎來到StackOverflow。由於你的問題已被回答(由你)完成。只需接受答案(您自己回答之後需要等待幾天)。如果您還有其他問題,則需要提出一個新問題。不要問主觀問題(如「最佳資源」)。你應該再次通過[tour](https://stackoverflow.com/tour)。 – Trisped
@Trisped我計劃一旦StackOverflow允許我接受我的答案。 – HuntK24