6

Linq To Entities で多対多の関係を照会する際に問題が発生しています。基本的に、Linq を使用してこのクエリを複製しようとしています。

Select * 
FROM Customer 
LEFT JOIN CustomerInterest ON Customer.CustomerID = CustomerInterest.CustomerID
LEFT JOIN Interest ON CustomerInterest.InterestID = Interest.InterestID
WHERE Interest.InterestName = 'Football'

私はネットを見回しましたが、これを行う方法の適切な例は実際には見つかりませんでした。私が持っている最も近いものは次のとおりです。

List<Customer> _Customers = (from _LCustomers in _CRM.Customer.Include("CustomerInterest.Interest")
                                  where _LCustomers.CustomerInterest.Any(x => x.Interest.InterestName == "Football")
                                  select _LCustomers).ToList();

これに関する問題は、顧客が複数の関心を持ち、そのうちの 1 つが「サッカー」である場合、それらすべてが返されることです。逆の問題を持つ All() も調べました。つまり、興味が 1 つあり、それがサッカーの場合にのみ返されます。2 つあり、そのうちの 1 つがサッカーでない場合は何も返されません。

誰でもアイデアはありますか?

4

5 に答える 5

2
        var results = from c in _CRM.Customer
                      from ci in c.Interests
                      join i in _CRM.Interests
                      on ci.ID equals i.ID
                      where i.Interest = "Football"
                      select c;
于 2010-10-15T16:00:12.407 に答える
1

汎用性を維持しようとする場合は、エンティティsql[Esql]を使用するのがより良い方法です。Coz L2Eは、linqクエリのコレクションの場所をサポートしていません。

使用できません

customer.Interests.Where(interest => Interest.Name =='FootBall')

クエリは次のようになります。

context.CreateQuery(@"SELECT VALUE Customer FROM Customer WHERE EXISTS( SELECT VALUE FROM CustomerInterest WHERE CustomerInterest.Ineterest.Name = 'FootBall')).Include("Interest");

それが役に立てば幸い!

于 2009-05-04T17:51:24.537 に答える
0

LINQT にとっては多すぎます。データベースでビューを使用するか、Deepak N が言ったように作業してみてください。一番

于 2009-06-16T04:20:45.683 に答える