2012-07-04 39 views
8

我做了一個sql查詢,它返回一個字符串 - 服務名稱。這是查詢:如何將IQueryable <string>轉換爲字符串?

IQueryable<string> query = from Comp in ServiceGroupdb.ServiceGroupes 
          where (Comp.GroupID == groupID) 
          select Comp.Name; 

如何從查詢中獲取字符串?

+0

如果您只希望得到一個響應,您爲什麼要將響應聲明爲IQueryable ?多個字符串會被視爲錯誤?如果您期待多個響應,然後轉換爲數組,否則請在您的查詢中明確並將其更改爲返回單個字符串。 – Lazarus

+0

我希望得到一個字符串作爲結果 – thechmodmaster

+0

但當我這樣做:字符串名稱=從Comp在ServiceGroupdb.ServiceGroupes其中(Comp.GroupID == groupID)選擇Comp.Name; – thechmodmaster

回答

31

LINQ總是返回一個序列,所以你必須從中檢索它。如果您知道只有一個結果,請使用Single()來檢索該項目。

var item = (from Comp in ServiceGroupdb.ServiceGroupes 
      where (Comp.GroupID == groupID) 
      select Comp.Name).Single(); 

有四種LINQ方法來檢索單個項目出的序列組成:

  • Single()返回的項目,如果有0或序列中一個以上的項目會拋出異常。
  • SingleOrDefault()返回該項目或默認值(nullstring)。如果序列中有多個項目,則會拋出。
  • First()返回第一項。如果序列中有0個項目,則會拋出。
  • FirstOrDefault()返回的第一個項目,或默認值,如果沒有項目)
+0

可以確認它在我的解決方案中有效。謝謝! – JPK

7

到查詢得到的第一個元素,你可以使用query.First()但如果沒有的元素,會引發異常。相反,您可以使用query.FirstOrDefault()這將給你第一個字符串或默認值(null)。因此,爲您的查詢,這將工作:

var myString = (from Comp in ServiceGroupdb.ServiceGroupes 
       where Comp.GroupID == groupID 
       select Comp.Name) 
       .FirstOrDefault(); 
5

你幾乎在那裏。

只是做

IQueryable<string> query = from Comp in ServiceGroupdb.ServiceGroupes where (Comp.GroupID == groupID) select Comp.Name; 
// Loop over all the returned strings 
foreach(var s in query) 
{ 
    Console.WriteLine(s); 
} 

或者使用query.FirstOrDefault()提到,你只會得到一個結果。

1

我找到methods'way更漂亮,更清晰,所以這裏有雲:

string query = ServiceGroupdb.ServiceGroupes 
       .Where(Comp => Comp.GroupID == groupID) 
       .Select(Comp => Comp.Name) 
       .FirstOrDefault(); 
-1

只是不喜歡這樣;

var query = from Comp in ServiceGroupdb.ServiceGroupes where (Comp.GroupID == groupID) select Comp.Name; 

查詢將包含您的結果。

+0

這不是答案,不同的風格只是相同的代碼 –

+0

他不需要使用任何不同的風格。他的查詢會產生一個字符串,這個變量將存儲該變量。如果你能仔細閱讀他所說的話。 「返回一個字符串 - 服務名稱」。所以他不需要任何foreach循環,因爲它只有一個值。 –

+1

where子句返回IQueryable ...與OP代碼的唯一區別是var的用法 – Alex