2011-06-28 48 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();