2009-09-02 9 views
3

LinqとLinqをEntity Framewokから始めました。その上に.NET Riaサービスがあります。 .NET RIAサービスドメインサービスで .NET Ria ServicesのLinqとEntityフレームワークの関連付けを照会する方法

、私が作成したい: 私の問題は、私はこのような第三の「接続」テーブルのFolderItemを使用して多くのrelationsshipに多くて2つのテーブルのフォルダおよびアイテムを持っているということです指定されたFolderIDのすべてのItemを返すメソッド。

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); 
} 

これは正しい構文ではありません。このような何かを希望

T-SQLで

Cannot convert lambda expression to type 'string' because it is not a delegate type

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

ユーザーは.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; 
    } 

qeustionがあり、どのようにそれはメソッドベースのクエリ構文を使用してのように見えるのでしょうか?

+0

「=」は「==」でなければならない点を除き、提案されたGetItemsで何が問題になっていますか?あなたはそれを試しましたか? –

+0

クレイグ、それはタイプミスでした。私はそれを修正しました。 –

+0

私はsを想定しています。クエリ式の中でも、誤植であり、cでなければなりません。いずれにしても、私はGetItemsを書いたときに何もひどく間違っているとは思えませんが、私はあなたに以下の別のオプションを与えます。 –

答えて

4

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

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

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

+0

ちょうど私が欲しいもの。ありがとう。親のエンティティからデータを攻撃するこの方法は、私は考えていませんでした。 –

2

親エンティティに子エンティティを含めることができます。

1)フォルダアイテムとアイテムが含まれるようにドメインクエリを更新します:

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

2)RIAサービスはに知っているように、メタデータファイルを更新し、あなたがこれを行うにしなければならない2つのことがあります。

[MetadataTypeAttribute(typeof(FolderMetadata))] 
public partial class Folder 
{ 
    internal sealed class FolderMetadata 
    { 
      ... 
      [Include] 
      public FolderItem FolderItem; 
    } 
} 
関連する問題