2009-04-28 1 views
0

私は、次のSQL文を変換し、トラブルを抱えているLINQツーエンティティ:LINQツーエンティティ

LINQで
SELECT l.* 
FROM locations l 
WHERE l.id NOT IN (/* array of ids */) 

、私のようなものを見たいのですが(myCollectionが除外される項目の一般的なリストです):

IQueryable<Location> locationQuery = from l in DataContext.Location 
            where !myCollection.Contains(l) 
            select l; 

しかし、それは動作しませんので、入っては(私はそれを見るように)LINQツーエンティティでは使用できません。私の最高の/最も近いLINQの試みで、私は場所の私のコレクション(List)を持っていると私は、データベースからすべての既存の場所を取得するのDataContextを持っている:

明らか
List<Location> Route = new List<Location>(); 

// Some code to add Location entities from the DB to the Route collection 

var innerQuery = from p in Route 
       select p.ID; 

IQueryable<Location> locationQuery = from l in DataContext.Location 
            where !((innerQuery).Any(k => k == l.ID)) 
            select l; 

私はからすべての場所を取得したいです私のローカルコレクションにないDB。ただし、コードではNotSupportedExceptionが発生します。

'Closure type'の定数値を作成できません。このコンテキストでは、プリミティブ型( 'Int32、String、およびGuid'など)のみがサポートされています。

私はそれを別のアプローチで使いこなしましたが、うまく動作しません。今、LINQ-to-entitiesは、上記のエラーを説明する上位レベルの比較(オブジェクトレベル)ができないことを読んでいます。

私の実際の質問は、LINQでSQLで簡単に何ができるのですか?私は、ローカル(非DB)コレクションに存在するエンティティを除いて、DBから複数のエンティティを選択したいだけです。

+0

ようこそ、私はここで同様の変換の問題を提起したLINQからSQLへの機能の半分ではありません... –

+0

の代替。 http://stackoverflow.com/questions/4093592/how-to-lookup-entities-in-entityframework-4-by-a-finder-interface-works-in-linq私はまだ解決の運がなかった。 LinqToSqlではEFではできないことがたくさんあるようです。それは非常に迷惑で/失望しています。あなたの質問は少し異なりますが、最終結果は似ています。私はあなたが私より多くの成功を収めたことを願っています。 –

答えて

2

この投稿を試してみてください:LINQツーエンティティへ "NOT IN" clause in LINQ to Entities

+0

そのリンクをありがとう、私はhttp://blogs.msdn.com/phaniraj/archive/2008/07/17/set-based-operations-in-ado-net-data-servicesに自分の道を見つけました。 aspx。私はそれをそのように働かせるかもしれないが、(罪悪感はない!)些細なことをする複雑でない方法はない? – pyrocumulus