我想撰寫一個函式來獲取我嘗試使用此函式的產品不同客戶名稱。我認為問題出在 where 子句中。請告訴我是否有其他方法可以做到這一點
public string[] GetProductDistinctCustomers(int productId)
{
return _context.Orders
.Include(o => o.OrderDetails)
.Where(o => o.OrderDetails.Exists(od => od.ProductId == productId))
.Select(o => o.User.UserName)
.Distinct()
.ToArray();
}
但我明白了InvalidOperationException。
課程:
public class Order
{
public int OrderId { get; set; }
public List<OrderDetail> OrderDetails { get; set; }
public string UserId { get; set; }
public AppUser User { get; set; }
}
public class OrderDetail
{
public int OrderDetailId { get; set; }
public int Amount { get; set; }
public int ProductId { get; set; }
public Product Product { get; set; }
public int OrderId { get; set; }
public Order Order { get; set; }
}
public class AppUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
我很感激你能給我的任何提示
例外:
InvalidOperationException: LINQ 運算式
'DbSet() .Where(o => MaterializeCollectionNavigation( Navigation: Order.OrderDetails, subquery: DbSet() .Where(o0 => EF.Property<Nullable>(o, "OrderId") != null && object.Equals(objA: (object)EF.Property<Nullable>(o, "OrderId"), objB: (object)EF.Property<Nullable>(o0, "OrderId"))).Exists(od => od.ProductId == __productId_0))'
無法翻譯。要么以可翻譯的形式重寫查詢,要么通過插入對“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或'ToListAsync'。有關詳細資訊,請參閱https://go.microsoft.com/fwlink/?linkid=2101038。
uj5u.com熱心網友回復:
物體框架不知道方法Exists。將其替換為Any:
public string[] GetProductDistinctCustomers(int productId)
{
return _context.Orders
.Include(o => o.OrderDetails)
.Where(o => o.OrderDetails.Any(od => od.ProductId == productId))
.Select(o => o.User.UserName)
.Distinct()
.ToArray();
}
此外,您可以洗掉Include這種情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/463229.html
