2011-01-20 1 views
0

現在、以下のLINQクエリがあります。どのようにして2つのクエリを1つにマージできますか?基本的に、私は単一のクエリを除き2つのLINQ文を1つにマージしてlist2.Except(list1)を実行するにはどうすればよいですか?

IEnumerable<int> deltaList = people2010.Except(allPeople); 

から取得したい結果を戻すためにLINQクエリを記述します。

var people2010 = Contacts.Where(x => x.Contractors 
.Any(d => d.ContractorsStatusTrackings 
.Any(date => date.StatusDate.Year >= 2010))) 
.Select(x => x.ContactID); 

var allPeople = Contacts.Where(x => x.Contractors 
.Any(m => m.ContactID == x.ContactID)) 
.Select(x=> x.ContactID); 

ありがとう!

+0

論理的には、誰も除外している人のサブセットを取得するのは理にかなっていますか?なぜあなたの変数名はそれがあなたが望むものであることを示唆していますか? –

答えて

1

Exceptなぜやっていないのですか? people2010allPeopleの変数はクエリであり、データではないことを忘れないでください。彼らをそのまま使ってみませんか?

これが何らかの理由で受け入れられない場合は、これがLINQ to Object、LINQ to SQLなどにあるかどうか、Exceptを使用するだけで何が問題なのかなど、詳細をお知らせください。

+0

"あなたのpeople2010とallPeople変数は単にクエリであることを忘れないでください - データではありません" - 良い点!この時点で、Exceptを避ける理由があります。私は質問を改善するための可能な方法を探していました。おそらく2つではなく1つのクエリを書くかもしれません。 – DenaliHardtail

0

あなたのクエリを書くためのよりエレガントな方法を探しているようです。

var deltaList = 
    from contact in Contacts 
    let contractors = contact.Contractors 
    where contractors.Any(ctor => ctor.ContractorStatusTrackings 
             .Any(date => date.StatusDate.Year >= 2010)) 
      && !contractors.Any(m => m.ContactID == contact.ContactID) 
    select contact.ContactID 
関連する問題