2015-04-23 38 views
-1

我有一個數據表。我從下面的代碼中獲得了不同的值。使用where子句爲數據表選擇不同的值

AllFields是我的數據表。

var distinctIds = AllFields.AsEnumerable() 
    .Select(s => new 
    { 
     id = s.Field<string>(ColumnName), 
    }) 
    .Distinct() 
    .ToList(); 

但是我想獲得與列在同一列的條件的不同值。我已經嘗試了下面的東西。

var distinctIds = AllFields.AsEnumerable() 
    .Select(s => new 
    { 
     id = s.Field<string>(ColumnName), 
    }) 
    .Distinct() 
    .Where(f => f.id.Contains(TxtStringSearchInput.Text)) 
    .ToList(); 

它在運行時顯示下面的錯誤。

nullreferenceexception error。 {「對象引用未設置爲對象的實例」}}

+0

心理調試說,你行之一中有一個'null'和包含失敗。然而,沒有一個實際的錯誤信息,我的精神技能已被認爲是缺乏。 –

+0

@SteveMitcham可能是正確的 - 請查看關於此錯誤信息的_lots_鏈接問題以及如何追蹤它的位置。 –

回答

3

正如您正在獲取NRE。它看起來像價值的一個人來null所以你應該在Where()以及檢查

var distinctIds = AllFields.AsEnumerable() 
.Select(s => new 
{ 
    id = s.Field<string>(ColumnName), 
}) 
.Distinct() 
.Where(f => f.id !=null && f.id.Contains(TxtStringSearchInput.Text)) 
.ToList(); 
3

既然你的第二個電話得到一個空引用異常,唯一的區別是如果您在id字段中調用Contains,那麼很可能id字段對於您的一個比較爲空。

嘗試調用Contains,例如前檢查null

var distinctIds = AllFields 
    .AsEnumerable() 
    .Select(s => new {id = s.Field<string>(ColumnName),}) 
    .Distinct() 
    .Where(f => 
     f.id != null && 
     f.id.Contains(TxtStringSearchInput.Text)) 
    .ToList();