2013-10-03 70 views
1

我想使用下面的示例來解釋我的問題。在列表中搜索行,其中一個字段與字符串數組中的任何值匹配

我有一個列表創建的,它具有像場 - StudEmail,名字,姓氏,年齡,EligibilityMode

現在, 我有一個字符串數組列表如下,以驗證所有允許值的EligibilityMode列。

List<string> EligModes = new List<string> { "WithCertificate", "With Certificate", "WithoutCertificate","Without Certificate" }; 

如何獲得的行列表我的主列表,其中EligibilityMode沒有在EligModes字符串數組列表的匹配值。我試着用Contains(),existvalue()和Any()來做這個,但是找不到解決方案。

MainList.Where(c => (c.EligibilityMode.existvalue(EligModes))).ToList(); 

對此有何幫助?

編輯:

我已經試過如下:

DataTable dt1 = new DataTable(); 
dt1 = ds.Tables[0]; 
List<object> lst = dt1.AsEnumerable().ToList<object>(); 

lst = lst.Where(c => !EligModes.Contains(c.EligibilityMode)).ToList(); 

但它不是在c.EligibilityMode標識列。

而且,我試過了,

DataTable dt1 = new DataTable(); 
dt1 = ds.Tables[0]; 
List<object> lst = dt1.AsEnumerable().ToList<object>(); 

result = from m in lst 
    where !EligModes.Any(val => lst.EligibilityMode.Contains(val)) 
    select m; 

這裏也是同樣的問題lst.EligibilityMode。

請確認我從數據表創建列表是正確的。

回答

1

這給出了從主列表中的項目,其具有在EligModes列表中未列出EligibilityMode值:

MainList.Where(c => !EligModes.Contains(c.EligibilityMode)).ToList(); 

UPDATE:因此MainList是數據的行的列表,轉換爲對象,不能訪問的任何性質數據行(實際上EligibilityMode屬性甚至在這裏不存在)。這是正確的DataTable處理:

var rows = from r in ds.Tables[0].AsEnumerable() 
      where !EligModes.Contains(r.Field<string>("EligibilityMode")) 
      select r; 

或用方法的語法:

var rows = ds.Tables[0].AsEnumerable() 
      .Where(r => !EligModes.Contains(r.Field<string>("EligibilityMode")); 

你應該學會basics of Linq to DataSet querying

+0

感謝您的快速回復。我試過這個:lst = lst.Where(c =>!EligModes.Contains(c.EligibilityMode))。ToList();但它顯示c.EligibilityMode下的語法錯誤紅線。我不知道爲什麼它不能識別列表中的列名。我已經將我的數據錶轉換爲列表:DataTable dt1 = new DataTable(); dt1 = ds.Tables [0]; 列表 lst = dt1.AsEnumerable()。ToList (); –

+0

@MittalPatel是'c。EligibilityMode'一個字符串? –

+0

是的。列類型是字符串。我再次更新了我試過的問題。請看那裏。 –

0

試試這個還(雖然還沒有檢查):

result = from m in MainList 
      where !EligModes.Any(val => MainList.EligibilityMode.Contains(val)) 
      select m; 
0

它可能工作。 (c => EligModes.Contains(c.EligibilityMode))。ToList();

相關問題