gpt4 book ai didi

c# - 如何根据多个条件使用 Linq 查找特定项目?

转载 作者:行者123 更新时间:2023-11-30 14:45:24 26 4
gpt4 key购买 nike

我有一个非常简单的查询:

//user from UserManager from default AccountController from .net Identity
var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

var product = await Task.Run(()
=> db.WatchedProducts.Where(u => u.ApplicationUserId == user.Id && u.ProductId == id));

我想做的是找到具体的productWatchedProducts列表。它的模型如下所示:

public class WatchedProduct
{
[Key]
public int Id { get; set; }

[ForeignKey("ApplicationUser")]
public string ApplicationUserId { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }

[ForeignKey("Product")]
public int ProductId { get; set; }
public virtual Product Product { get; set; }
}

ApplicationUserWatchedProducts 的 list .

我的问题是,为什么不获取 WatchedProduct product我得到一个IQueryable<WatchedProduct> product

最佳答案

发生这种情况是因为您正在使用方法 Where() . Where()方法根据您的 lambda 表达式过滤数据 => u.ApplicationUserId == user.Id && u.ProductId == id并返回 IQueryable<TSource>IEnumerable<TSource> (请参阅 Reza Aghaei 的回答中的精彩解释)。

如果你想获得 WaterProduct 产品,那么只需通过 FirstOrDefault() 获得它方法:

var product = await Task.Run(() 
=> db.WatchedProducts.Where(u => u.ApplicationUserId == user.Id && u.ProductId == id)
.FirstOrDefault());

您没有获得任何数据,因为您没有具体化您的查询。它被称为延迟执行。延迟执行意味着您的 linq 代码将不会在数据库中执行,直到您需要必要的数据。因此,要具体化数据或在数据库中执行查询,您应该调用如下方法:

foreach, toList(), First(), FirstOrDefault(), Single(), SingleOrDefault(), etc...

关于c# - 如何根据多个条件使用 Linq 查找特定项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53947067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com