1

これに対する答えを見つけようとしましたが、Googleで見つけることができませんでした。おそらく正しい用語を検索していないので、ここで質問すると思いました。

以下は、送信されたadjusterTypeに等しい連絡先ではなく、すべての連絡先を返します。

var contacts = from c in session.Linq<Contact>() select c;
contacts.Where(c => c.ContactAdjuster.AdjusterType == adjusterType);

以下は、期待される結果を返します。AdjusterType を満たす連絡先のみを返します。LINQ に対する私の理解不足だと思います。

var contacts = from c in session.Linq<Contact>() select c;
contacts  = contacts.Where(c => c.ContactAdjuster.AdjusterType == adjusterType);

前もって感謝します。

4

2 に答える 2

2

Where 句は、IEnumerable の場合は IEnumerable を返します。これは、LiNQ および C# の標準的な動作です。コレクションを変更する代わりに、where 句に基づいて新しいコレクションを返します。

NHibernate LiNQ はこれを模倣するべきだと思います。

于 2009-10-02T18:50:03.980 に答える
2

CatZ は絶対に正しいです。既存のものに基づいて新しいものを作成している「連絡先」コレクション/列挙型を変更していないため、2 番目のステートメントが機能します。

ただし、単に CatZ ステートメントを繰り返す代わりに、ちょっとしたアドオンを次に示します。

ただし、これを1つのステートメントで記述できます

var contacts = 
    from c in session.Linq<Contact>() 
    where c.ContactAdjuster.AdjusterType == adjusterType
    select c;

または単に

var contacts = session.Linq<Contact>().Where(c => c.ContactAdjuster.AdjusterType == adjusterType);
于 2009-10-02T19:12:50.640 に答える