2011-07-01 6 views
2

私の要件は、stringの値とstringのリストを比較することです。split in contains - LINQ

コード:

string Names = "Prabha,Karan"; 
     List<string> Presenter = new List<string> { "Prabha", "Joe", "Hukm" }; 

bool Presented = Presenter.Contains(Names.Split(',')); 

上記のコードはエラーをスローし、ここで私は名前が(プレゼンターは、名前のsplited値を持つ)プレゼンターに提示されている見つける必要があります。

+0

これが機能しない理由が分かっているのは、あなたがリストに含まれているものを渡しているが、1つしかチェックしていないからです。しかし、ub1kの答えは良い解決策のように見える – Manatherin

+0

正確にしてください:PresenterまたはAnyに存在する名前からすべての要素に 'true'を受け取りますか?その上にあなたのコード..それは(それが働いた場合)trueまたはfalseを返す必要がありますか? – ub1k

答えて

4

あなたは以下のようにそれを行うことができます:

var splitNames = Names.Split(','); 
bool Presented = Presenter.Any(p => splitNames.Contains(p)); 

EDIT:

あなたが興味を持っている場合の一致がちょうど何をしています

var matches = Presenter.Where(p => splitNames.Contains(p)) 
+0

あなたはそれが動作すると確信していますか? – sll

+0

は、Presenterの任意の要素であるNamesの任意の要素に対してPresented == trueを返します。はい、それは動作します。私は常に私が投稿するテストコードをビルドします。 – ub1k

+0

単体テストをしても機能しません(present = Presenter.Any())(EDITを追加する前に尋ねたので、後でEDITとして投稿したコードは使用していません) – sll

0
string names = "Prabha,Karan"; 
List<string> presenter = new List<string> { "Prabha", "Joe", "Hukm" }; 
IEnumerable<string> namesList = names.Split(',').Select(x => x.Trim()); 
var list = presenter.Intersect(namesList); 
bool presented = namesList.Count() == list.Count()); 

ユニットをあなたのケースをカバーするテスト: