我有EmailAddress被覆寫的原始癡迷類ToString():
public class EmailAddress
{
private string _value;
public EmailAddress(string value)
{
_value = value;
}
public override string ToString()
{
return _value;
}
}
我的域模型Customer如下所示:
public class Customer
{
public EmailAddress EmailAddress { get; set; }
public string FullName{ get; set; }
}
我已經EmailAddress在 FluentApi 中配置了轉換:
modelBuilder.Entity<Customer>().Property(x => x.EmailAddress)
.HasConversion(
x => x.ToString(),
x => new EmailAddress(x));
我也有通用的存盤庫模式,當我想過濾資料時:
public List<Customer> GetCustomers(GetCustomersQuery queryParameters)
{
IQueryable<Customer> queryCustomers = _customerContext.GetAll();
return queryCustomers.Where(x =>
x.EmailAddress.ToString()
.Contains(queryParameters.Email)).ToList();
}
我有一個錯誤:
DbSet<Customer>().Where(t => t.EmailAddress.ToString()無法翻譯LINQ 運算式。附加資訊:方法翻譯object.ToString失敗。
我試過 EF 6.4 你有什么解決方法嗎?
uj5u.com熱心網友回復:
對于真正有動力,不怕復雜領域的人,我找到了解決方案
public class EmailAddress
{
private string _value;
public static explicit operator string(EmailAddress emailAddress) => emailAddress._value;
public EmailAddress(string value)
{
_value = value;
}
public override string ToString()
{
return _value;
}
}
和查詢是
queryCustomers.Where(x =>
((string)x.EmailAddress)
.Contains(queryParameters.Email)).ToList();
此查詢在服務器端執行。
uj5u.com熱心網友回復:
您可以嘗試如下:
return queryCustomers.Where(x =>
x.EmailAddress
.Contains(queryParameters.Email)).ToList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/365258.html
