2017-12-06 10 views
1

選択したサービス(サービスは別のエンティティ)を持つファイル(ファイルはエンティティ)のリストを取得しようとしています。このファイルには多くのサービスがあります。配列(またはリスト)にLINQを使用して別の配列(リスト)が含まれているかどうかを確認する方法

私は、次のステートメントを試してみましたが、それは正しい結果得られません。

var _serviceTypes = viewModel.SelectedServiceTypes; 
// _serviceTypes is an array of integers 

var resultsTemp = repository.Files.Where(f => f.Services.Select(s => s.ServiceTypeID).Intersect(_serviceTypes).Any()); 

は、私が何をしないのですか?

EDIT:整数のアレイで

_serviceTypes:{INT [2]}

ファイルが多くのサービスを持つことができ、それぞれのサービスタイプID(整数)として

について例えば、ファイルには救急車(サービスタイプID:3)と入院(サービスタイプID:5)という2つのサービスがあります。私は両方のサービスを持っているすべてのファイルを取得したい。

+0

あなたは、そのIdを_serviceTypesリスト/配列内にあるすべてのファイルを取得しようとしていますか? – Shyju

+0

これが実行されたときに '_serviceTypes'に何が表示され、その後に' resultsTemp'に何が表示されますか? – David

+0

あなたの考えは正しいようです。それが正しいとはどのように分かりますか? – Andrei

答えて

1

次の操作の一部は、あなたの質問に答える必要があります。

// requested IDs 
var requestedIDs = new List<int>(); 
// the IDs from one file 
var IDsInFile = new List<int>(); 
if (requestedIDs.Except(IDsInFile).Any()) 
{ 
    // at least some requested IDs are not in the file 
} 
else 
{ 
    // all requested IDs are in the file 
} 
if (requestedIDs.Intersect(IDsInFile).Any()) 
{ 
    // at least some requested IDs are in the file 
} 
else 
{ 
    // not a single requested ID is in the file 
} 

あなたが要求したサービスのすべてが含まれているすべてのファイルをしたいので、正しいクエリが

var _serviceTypes = viewModel.SelectedServiceTypes; 
// _serviceTypes is an array of integers 

var resultsTemp = repository.Files.Where(f => !_serviceTypes.Except(f.Services.Select(s => s.ServiceTypeID)).Any()); 
+0

@ grek40さん、ありがとうございました。 – burakk

0

だろうあなたがチェックしています両方のリストに1つの要素が存在する場合、これはおそらくあなたが気にしていたものではありません。交差点は、(それがあなたのコードからも明らかではないとして、それは_serviceTypesだと仮定して)より小さいリストと等しいかどうかをチェックするようにしてください:

var resultsTemp = repository.Files 
          .Where(f => f.Services.Select(s => s.ServiceTypeID) 
          .Intersect(_serviceTypes) 
          .OrderBy(x => x) 
          .SequenceEqual(_serviceTypes.OrderBy(x => x)); 
関連する問題