gpt4 book ai didi

c# - 从 where 子句或第一个元素返回一个元素

转载 作者:行者123 更新时间:2023-11-30 22:20:51 25 4
gpt4 key购买 nike

我正尝试通过以下方式使用 Entity Framework 5 查询我的数据库:

userProfile = context.UserProfiles.SingleOrDefault(up => up.UserId == userId && up.IsActive);

现在,当存在多个用户配置文件时(由于 SingleOrDefault),这显然会引发异常。

如何构造我的查询,以便从当前用户 (up.UserId == userId) 获取事件用户配置文件第一个没有用户配置文件处于事件状态时?

我完全知道如何在两个查询中执行此操作,但我认为这会带来太多开销,而这应该只需要一个查询就可以实现:

userProfile = context.UserProfiles.Single(up => up.UserId == userId && up.IsActive); // throws exception when not exactly one

if (userProfile == null)
{
userProfile = context.UserProfiles.FirstOrDefault(up => up.UserId == userId);
}

编辑:

我现在使用它作为我的参数,并且可以完美地使用 IsActive 属性:context.UserProfiles.Where(up => up.UserId == userId).OrderByDescending(up => up.IsActive).FirstOrDefault();

现在,当没有 IsActive == true 行时,我想按它们的 LastUsed 日期对它们进行排序,并选择最近使用的那个:

context.UserProfiles.Where(up => up.UserId == userId).OrderByDescending(up => up.IsActive).OrderByDescending(up => up.LastUsed).FirstOrDefault();

遗憾的是,这总是返回最新的,即使有一行包含IsActive == true

最佳答案

怎么样:

var userProfile = context.UserProfiles.Where(up => up.UserId == userId)
.OrderByDescending(up => up.IsActive).FirstOrDefault();

关于c# - 从 where 子句或第一个元素返回一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14772286/

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