2011-06-28 79 views
0

我有以下的Linq查詢,我需要得到Guid結果作爲一個字符串。下面實際上給了我對象「IQueryable」的字符串表示。我如何才能把guid當成一個字符串?如何將IQueryable <System.Guid>轉換爲字符串?

謝謝!

context.ApplicationId = 
      DataBaseEntities.Applications.Where(a => a.Name == applicationName) 
             .Select(a => a.Id).ToString(); 
+0

你用EF嗎?或哪個ORM? – benwasd

回答

5

我懷疑你實際上是試圖擺脫單一的結果你需要等什麼是

context.ApplicationId = DataBaseEntities.Applications 
    .Single(a => a.Name == applicationName).Id.ToString(); 

現在,如果你的數據層不明白Single,你可以嘗試

context.ApplicationId = DataBaseEntities.Applications 
    .First(a => a.Name == applicationName).Id.ToString(); 
0

的可查詢表示序列Guid但看起來你只是想一個。因此,無論使用FirstSingle

context.ApplicationId = DataBaseEntities.Applications 
    .Where(a => a.Name == applicationName) 
    .Select(a => a.Id) 
    .First() 
    .ToString(); 
0
context.ApplicationId = 
     DataBaseEntities 
      .Applications 
      .Where(a => a.Name == applicationName) 
      .Select(a => a.Id). 
      .SingleOrDefault(). 
      .ToString(); 
1

IQueryable有很多結果。您可以使用.Single().ToString();確保只有一個結果,然後將其轉換爲string

4

那麼序列中可以有多個Guids ...你想如何將它們結合在一起?例如,你可以只使用string.Join(在.NET 4中,.NET 3.5是稍微麻煩):

string guids = DataBaseEntities.Applications 
           .Where(a => a.Name == applicationName) 
           .Select(a => a.Id); 
string guid = string.Join(',', guids); 

或者,如果你知道會有隻有一個比賽,你可以使用Single得到一個值,然後查找ID,然後調用ToString

string guid = DataBaseEntities.Applications 
           .Single(a => a.Name == applicationName) 
           .Id.ToString(); 

如果可能有多個匹配,或沒有,你需要考慮一下像FirstOrDefault()選項。

0

首先,您的select語句返回Guid的單個Guid列表。如果你真的只想要一個,你應該調用下面的方法之一: - First():如果你可能有幾個,這將採取第一個,並且如果沒有的話會拋出一個錯誤 - FirstOrDefault():如果你可能有幾個或者沒有,那麼這將取第一個,或者如果沒有的話,默認爲一個空的Guid。 - Single():如果只有一個,那麼就會用那個,並且會拋出異常if沒有或多於一個 - SingleOrDefault():如果將有零個或一個,這將採用那個,或者默認爲空的Guid(如果沒有的話),或者如果有幾個會引發異常。

context.ApplicationId = 
DataBaseEntities.Applications.Where(a => a.Name == applicationName) 
.Select(a => a.Id).Single().ToString();