因爲我剛剛開始使用LINQToEntities,Entity Framework和Lambda表達式,所以我在獲取某些數據時遇到了問題。通過導航屬性獲取數據的Lambda表達式,LINQToEntities
讓我解釋一下我的情況:
我有4個表的數據庫,如下所示:
當我生成數據庫在Visual Studio(2010)模型的結果是這樣的:
我搜索了一些資料和證明,因爲該表t_us er_role只有它的兩個父表中的id,它會在模型中被抽象出來,而你必須改用導航屬性。
我有一些問題得到了一個給定的系統上的用戶的角色信息(作爲下一個功能一樣)
public t_role GetRoleForUser(string userId, string sysId)
{
entities = new secfinEntities(); //context from the model
t_role userRole = entities.t_role.Where(r => r.t_user.Any(u => u.uid == userId) & r.sys_id == sysId).First();
return userRole;
}
現在我要實現一個簡單的搜索功能,將查找包含所提供的用戶字符串,並返回給定系統上的用戶ID和名稱(uid,user_name)及其角色的信息(role_id,role_name),所以基本上我想將下一個SQL查詢轉換爲Lambda表達式(保存在請注意,在模型中,表t_user_role已被抽象化)
SELECT U.uid, U.user_name, R.role_id, R.role_name
FROM t_user U
INNER JOIN t_user_role UR ON U.uid = UR.uid
INNER JOIN t_role R ON UR.role_id = R.role_id
WHERE R.sys_id = @p0 -- first parameter
AND U.user_name LIKE '%' + @p1 + '%' -- second parameter
另外,我想的是,結果存儲在我定義爲一個類型的列表如下:
public class UserRole
{
public string UserId { get; set; }
public string UserName { get; set; }
public string RoleId { get; set; }
public string RoleName { get; set; }
public UserRole(string uid, string uname, string rid, string rname)
{
UserId = uid;
UserName = uname;
RoleId = rid;
RoleName = rname;
}
}
所以解釋我做了什麼什麼,我試圖做的第一個問題是後:如何做到這一點?第二:同樣可以通過詳細形式而不是Lambda表達式來完成嗎?如果是的話,怎麼樣?
非常感謝您的時間。
+1爲準確提供我們需要的信息來幫助你 – Smudge202