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への変換は、クエリの場合の1つの特別なトリックを除いて、一般的に非常に簡単です。以下に示すように、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

他にも役立つリソースがいくつかあります(グーグルですばやく検索すると、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 に答える