[英]Converting guid to string with entity framework
我试图通过 Web 服务将 GUID 作为字符串传递,但是我遇到了障碍。 GUID 作为UNIQUEIDENTIFIER
存储在 SQL Server 中,EF 将其作为 GUID 提取。 我想要做的是在我的查询中这样做:
var query = myEntities.Foo.Where(q => q.Id== Id)
.Select(bar =>
new Bar()
{ BString = bar.GUID }
);
现在,C# 抛出一个构建错误,您无法将System.Guid
转换为string
,所以我认为您可以这样做:
{ BString = bar.GUID.ToString() }
甚至
{ BString = Convert.ToString(bar.GUID) }
但两者都以运行时异常结束:
有一个异常,它是 System.NotSupportedException:LINQ to Entities 无法识别方法“System.String ToString(System.Object)”方法,并且此方法无法转换为存储表达式。
所以我认为在这两种情况下,它都无法找出从UniqueIdentifier
到varchar
的 T-SQL 等价物。
除了检索对象,然后迭代我的返回集,将每个对象复制到一个新对象并在那时转换 guid->string 之外,有没有办法解决这个问题?
谢谢。
将其转换为 LINQ 语句查询部分之外的字符串。
var query = myEntities.Foo.Where(q => q.Id== Id).Select(r => r.GUID)
.AsEnumerable()
.Select(guid =>
new Bar()
{ BString = guid.ToString() }
);
.AsEnumerable()
是重要的部分:它将结果从IQueryable
转换为IEnumerable
,具有在进行数据库查询后在客户端上运行任何进一步操作的效果。 (您也可以在其位置使用.ToArray()
或.ToList()
。)
如果性能不是问题,您可能应该手动将您的 GUID 重新映射到字符串,正如您自己建议的那样:
var query = from entity in myEntities.Foo
where entity.Id == Id
select new { GUID = entity.GUID };
var response = from item in query.ToList()
select new Bar { BString = item.GUID }
这类似于@Tim Rogers 的建议,但明确分为两个查询。
我提出的另一个选择是编写一个存储过程,使用 T-SQL 的原生convert()
语句将 GUID 转换为字符串。 这将解决 EF 无法自动将 GUID 映射到字符串的问题。
现在可以使用new Guid(<your string>);
将字符串转换为 Guid 而不是将 Guid 转换为字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.