2

如何将此 SQL 语句转换为 LINQ:

SELECT     [Content].[Content], [Content].ListOrder, [Content].ContentTypeId,        
           [Content].ContentId
FROM       [Content] INNER JOIN
           GroupContentPermission ON [Content].ContentId = GroupContentPermission.ContentId 
WHERE      GroupContentPermission.GroupId IN 
           (SELECT GroupId FROM GroupUser WHERE GroupUser.UserId = 169)
4

2 回答 2

3

转换为 LINQ 通常非常简单,除了在查询的情况下有一个特殊技巧。您可以用自然的方式翻译您的 select、where 和 from 语句,如下所示。但是,在语句的情况下,您必须先从IN内部子查询中获取结果,然后检查内部子查询是否是您要检查的值。.Contains

var groups =
   (from gu in GroupUser
    where gu.UserId == 169
    select gu.GroupId).ToList();

var result = 
    from p in GroupContentPermission
    join c in Content on p.ContentId equals c.ContentId
    where groups.Contains(p.GroupId)
    select new { c.Content, c.ListOrder, c.ContentTypeID, c.ContentId };

// result should contain the same results as the SQL query

以下是您可能会发现有用的其他一些资源(如果您进行快速 google 搜索,您可以在 LINQ 上找到更多资源和教程。实际上有数千个):

于 2012-07-23T21:25:56.713 回答
1

假设您已经将表与模型中的外键链接起来(DBML/EntityFrameworks):

Contents.Where(x => x.GroupContentPermission.GroupUser.UserId == 169).Select(x => new {
    x.Content,
    x.ListOrder,
    x.ContentTypeId,
    x.ContentId })

或者最好只抓取完整的 Content 对象,并使用您想要的任何列:

var contents = Contents.Where(x => x.GroupContentPermission.GroupUser.UserId == 169).ToList();

foreach (var content in contents)
    Console.Write(content.Content);
于 2012-07-23T21:29:34.363 回答