使用实体框架将guid转换为字符串

Dio*_*Dio 3 c# entity-framework

我正在尝试将GUID作为字符串传递给Web服务,但是我已经遇到了障碍.GUID作为a存储在SQL Server中UNIQUEIDENTIFIER,EF将其作为GUID提取.我想要做的是在我的查询中这样做:

var query = myEntities.Foo.Where(q => q.Id== Id)
                .Select(bar =>
                        new Bar()
                            { BString = bar.GUID }
                        );
Run Code Online (Sandbox Code Playgroud)

现在,C#抛出,你不能转换生成错误System.Guidstring,所以我认为你可以这样做:

{ BString = bar.GUID.ToString() }
Run Code Online (Sandbox Code Playgroud)

甚至

{ BString = Convert.ToString(bar.GUID) }
Run Code Online (Sandbox Code Playgroud)

但两者都以运行时异常结束:

有一个异常,它是System.NotSupportedException:LINQ to Entities无法识别方法'System.String ToString(System.Object)'方法,并且此方法无法转换为商店表达式.

所以我推测,在这两种情况下,它不能够找出一个T-SQL相当于从去UniqueIdentifiervarchar.

除了检索对象之外,有没有办法解决这个问题,然后迭代我的返回集将每个对象复制到一个新对象并在那时转换guid-> string?

谢谢.

Tim*_*ers 6

将其转换为LINQ语句的查询部分之外的字符串.

var query = myEntities.Foo.Where(q => q.Id== Id).Select(r => r.GUID)
  .AsEnumerable()
  .Select(guid =>
    new Bar()
    { BString = guid.ToString() }
  );
Run Code Online (Sandbox Code Playgroud)

.AsEnumerable()是重要的部分:它将结果转换IQueryableIEnumerable,在数据库查询完成后具有在客户端上运行任何进一步操作的效果.(您也可以使用.ToArray().ToList()代替它.)