2013-10-01 201 views
5

我只想從使用LINQ的MSSQL DB中選擇2列。Linq to SQL選擇多列

的SQL應該是

select table.col1,table.col2 from table 

我試圖

IList<string> myResults = 
(
    from data in dbconn.table 
    where table.col5 == null 
    select new { 
     col1=data.Id.ToString(), 
     col2=data.col2 
    } 
).Take(20).ToList(); 

但這並沒有工作。

它說

cannot convert type list <AnonymousType#1> to Ilist<string> 
+1

?是否有例外?它沒有任何回報,或者你期望以外的東西? – TheEvilPenguin

+0

注意:您的LINQ查詢示例/嘗試似乎與您的「SQL應該」語句不一致。也許你可以澄清你的目標以及實際問題 – Seymour

回答

11

你基本上是試圖填補匿名類型列表中的條目,這是行不通的字符串列表。

您是否嘗試過這樣的事情?:

var list = from data in dbconn.table 
      where table.col5 == null 
      select new { 
      col1=data.Id.ToString(), 
      col2=data.col2 
      } 

然後你就可以很容易地使用這些條目在一個循環例如

foreach(var element in list) { 
//... 
} 

或者像一個列表

list.Take(20).ToList(); 
3

第一總之,一個字符串列表(List<string>)只能在一個元素中有一個不是兩個字符串(你是一個重新嘗試在這裏做)將類型更改爲var將修復您的異常,但不知道這是否是您想要的解決方案。

var myResults = 
(
    from data in dbconn.table 
    where table.col5 == null 
    select new { 
     col1=data.Id.ToString(), 
     col2=data.col2 
    } 
).Take(20).ToList(); 
3

您可以使用linq選擇多個字段如上所示,在各種示例中選擇這將返回爲匿名類型。如果你想避免這種匿名類型,這是一個簡單的技巧。

var items = myResults.Select(f => new [] { f.Col1, f.Col2 }).SelectMany(item => item).Distinct(); 

我想,當你說這是行不通的,你是什麼意思這解決了問題