2014-03-01 102 views
1
List<string> li = new List<string>(); 
     li.Add("10,11,12,1"); 
     li.Add("10,11,12,13"); 

     var q = from d in li 
       where d.Contains("1") 
       select d; 

我有串的兩個值的列表。我有單值「1」,我想要獲取包含值爲「1」的列表對象,即我希望列表中的第一個對象。如果我使用contains,那麼它將返回兩個列表對象值,那麼查詢會給我什麼樣的完美結果呢?什麼是LINQ相當於SQL

+0

我認爲你在這裏迷惑自己。你真正想要做的是確定哪個列表包含值'1',而不考慮'10','11'等中的1。與LINQ無關,或項目列表。 –

+0

這裏是樣品code.I有一個包含逗號分隔值數據庫字段和我配合這個field.If單個值,我得到的字段值值,那麼它將返回true,否則返回false –

回答

5

嘗試改變在哪裏

where d.Split(',').Contains("1") 

這將字符串分割成項目的列表,然後檢查產​​品在該列表中。

編輯:

正如在評論中提到,你不需要ToList()所以changethe以上。

+0

無需'ToList' –

+0

+1,你不需要ToList –

+0

@astander它完美的工作,但你可以請擴展它如何工作? –

2

如果你想直接對數據庫運行此查詢,你必須做這樣的事情:

var q = from d in li 
      where d.StartsWith("1,") || d.EndsWith(",1") || d.Contains(",1,") 
      || d.Equals("1") 
      select d; 

否則對方的回答工作在內存

+0

不必要的字符串 –

+0

請參閱更新 –

0

試試這個:

var q = 
    from d in li 
    where d.Split(',').Any(x => x == "1") 
    select d; 
+0

這將創建一堆創建一批不必要串。 –

+0

@PauloMorgado - 但不是一個顯著量是值得擔心的簡潔和代碼勝過任何低效率的可讀性,你不覺得 – Enigmativity

+0

@PauloMorgado - 迪你真的根據你的評論投票嗎? – Enigmativity

1

您可以試試這個:

List<string> li = new List<string>(); 
li.Add("10,11,12,1"); 
li.Add("10,11,12,13"); 
string searchItem = "1"; 
var q = from d in li 
     where ("," + d + ",").Contains("," + searchItem + ",") 
     select d; 

這個查詢也可以直接用於數據庫。