因为我刚刚开始使用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