2009-08-12 12 views
0

Linq-to-SQLの多対多の実装の例を知っていますか? 通常、DataContextで中間エンティティ(CustomerProductsなど)を使用し、すべてのクエリでそれを結合します。linq-to-sqlの多対多の実装

考え方は、部分的なクラスにカスタムプロパティを追加することで、中間レベルのエンティティをオブジェクトレベルから隠すことです - IEnumerabe Customer.ProductsやIEnumerable Product.Customersなどのコレクションを各クエリに使用しますが、SQLに正しく変換されるコードを書くことはできません。サブクエリでもちろん、

int ProductID = 555; 
Customers.Where(customer=>customer.Products.Any(product=>product.Id == productID)); 

すべてのSQLでのレベル:

これは、このまたは類似の方法を使用する必要があります。

または私は何かが恋しくて、これは正しい方法ではありませんか?

UPD。私はいくつかのSQL操作によって中間のエンティティを取り除く方法を探しています。もちろん、既存のコードをラップすることもできます。

答えて

1

私はこれをテストしていませんが、おそらく問題はIQueryableではなくIEnumerableを使用することですか?

次のことをしようと提案:

public partial class Customer 
{ 

    public IQueryable<Order> Orders 
    { 
    get 
    { 
     return this.CustomerOrders.Select(co => co.Order); 
    } 
    } 
}