2011-10-27 7 views
0

ここに私のコードです: -返される配列に少なくとも2つの要素があるかどうかを確認する方法は?

Repository.DB.Table01Repository.AsQueryable().Where(item => (item.Name.Split(' ')[1] == null)).ForEach(items => _VerifyList.Add(items.Name.Trim()));

私は '名前'を 'で分割し、2番目の要素がない場合は、それらのレコードが必要です。

おかげ.. Nameは、少なくとも1つのスペースが含まれている場合Splitが二つ以上の要素が生成されますので、以下のように

答えて

3

、あなたはそれを書くことができます。

Repository.DB.Table01Repository.AsQueryable() 
    .Where(item => !item.Name.Contains(" ")) 
    .ForEach(items => _VerifyList.Add(items.Name.Trim())); 

が実際にSplitを実行する必要はありません。

さらに、ContainsをSQLにマップすることができます(これはCLR methods that map to canonical LINQ functionsのいずれかです)。これは、クエリがデータベース上で正常に実行されることを意味します。他のメソッド(Split自身のような)は、IQueryableからデータベースを照会するときには使用できず、実行時例外がスローされます。

+0

あなたが(「」)item.Name.Containsを意味します= = false。 – User13839404

+0

@ User13839404:はい、前に「!」を入れていませんでした。今修正されました。 – Jon

0

このシナリオでは、空白に注意する必要があります。 "abcd ".Split().Count()は最後に空白文字があるため2を返します。

if(item.Name.Trim().Split() > 1) 
{ 
    // Do stuff 
} 

またはWHERE句で::この使用にこのように分割する前に、先頭と末尾の空白を削除するTrim()方法回避するために、

.Where(item => (item.Name.Trim().Contains(" "))) 
+0

良い点ローズ。ありがとう – User13839404

関連する問題