我正在尝试以以下方式使用 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