我想查詢我的實體框架5數據庫以下列方式一個元素:返回從WHERE子句或第一個
userProfile = context.UserProfiles.SingleOrDefault(up => up.UserId == userId && up.IsActive);
現在,這顯然會拋出一個異常時,不止一個用戶配置文件存在(由於SingleOrDefault
)。
我如何構建我的查詢,所以我得到從當前用戶的活躍 USERPROFILE(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);
}
編輯:
我「M現在用這個作爲我的參數,並與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
order by IsActive降序,並取第一個? – 2013-02-08 12:12:55
哦,你說得對 - 當然。這工作。謝謝:) – SeToY 2013-02-08 12:16:44
您需要使用'ThenByDescending'而不是第二個'OrderByDescending' – juharr 2013-02-08 12:41:05