【问题标题】:Entity Framework - writing query using lambda expression实体框架 - 使用 lambda 表达式编写查询
【发布时间】:2011-03-30 09:39:33
【问题描述】:

我刚刚启动了 Entity Framework & linq 并编写了这个查询

 var query = from rp in db.UM_RolePermission
             where (from ru in db.UM_RoleUser 
             where ru.UM_User.UserID == userId select ru.RoleID).Contains(rp.RoleId)
             select rp;

上述工作正常并满足我的需求,但是我也尝试使用 lambda 表达式编写相同的内容以理解这一点。

我已经尝试自己写这个,但我无法完成它。

var query1 = db.UM_RolePermission
             .Where(rp => (from ru in db.UM_RoleUser where ru.UM_User.UserID == userId select ru.RoleID).Contains(rp.RoleId));

谁能完成这个?

关系:

UM_RoleUser and UM_User

谢谢

【问题讨论】:

    标签: c# asp.net sql linq entity-framework-4


    【解决方案1】:

    我要跳到前面,假设您已经在多对多关系中定义了 RolePermission 和 RoleUser 之间的关系?这会让你的生活变得更简单。

    var query1 = db.UM_RoleUser
        .Where(ru => ru.UserId == userID)
        .SelectMany(rp => rp.RolePermissions);
    

    当然,这取决于您建立关系的方式。

    【讨论】:

    • 没有任何关系 b/w RolePermission & RoleUser
    • 为什么不做一个?根据你告诉我的内容,这听起来对我来说是一种自然的关系。
    【解决方案2】:
    var query = db.UM_RolePermission
                .Where(rp => db.UM_RoleUser
                             .Where(ru => ru.UM_User.UserID == userId)
                             .Select(ru => ru.RoleID)
                             .Contains(rp.RoleId))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      相关资源
      最近更新 更多