3

LinqとLinqtoEntityFramewokを始めたばかりです。その上、.NETRiaサービスを使用します。私の問題は、次のような3番目の「接続」テーブルFolderItemを使用して、多対多の関係を持つ2つのテーブルFolderとItemがあることです。 (ソース:InsomniacGeek.com

.NET RIAサービスドメインサービスで、特定のFolderIDのすべてのアイテムを返すメソッドを作成したいと思います。

T-SQLでは、次のようになります。

SELECT * FROM Item i
INNER JOIN FolderItem fi ON fi.ItemID = i.ID
WHERE fi.FolderID = 123

私のLinqの知識は限られていますが、次のようなことをしたいと思います。

public IQueryable<Item> GetItems(int folderID)
{
  return this.Context.Items.Where(it => it.FolderItem.ID == folderID);
}

これは正しい構文ではありません。次のエラーが発生します。

デリゲート型ではないため、ラムダ式を型'string'に変換できません

これを行う正しい方法は何ですか(関連付けを使用)?

どういうわけか.Include( "FolderItem")を使用できますか?

メソッド構文のみをお願いします。

PS。クエリ式を使用すると、次のようになります。

  public IQueryable<Item> GetItemsByFolderID(int folderID)
  {
    return from it in this.Context.Items
           from fi in it.FolderItem
           where fi.Folder.ID == folderID
           select it;
  }

質問は、メソッドベースのクエリ構文を使用するとどのように見えるでしょうか?

4

2 に答える 2

4

あなたのGetItemsは私にはうまく見えます。次のこともできます。

public IQueryable<Item> GetItems(int folderID)
{
    return this.Context.FolderItems
                       .Where(fi => fi.ID == folderID)
                       .Select(fi => fi.Items);
}

どちらも同じものを返す必要があります。

于 2009-09-03T18:50:07.343 に答える
2

親エンティティに子エンティティを含めることができます。これを行うには、2つのことを行う必要があります。

1)ドメインクエリを更新して、フォルダアイテムとアイテムを含めます。

return from x in Context.FolderItems
                        .Include("FolderItem")
                        .Include("FolderItem.Item")
       where x.ID == folderID
       select x

2)メタデータファイルを更新して、RIAサービスが関連付けをクライアントに返すことを認識できるようにします。

[MetadataTypeAttribute(typeof(FolderMetadata))]
public partial class Folder
{
     internal sealed class FolderMetadata
     {
           ...
           [Include]
           public FolderItem FolderItem; 
     }
}
于 2009-12-07T00:23:41.867 に答える