LINQ:将Guid转换为字符串

时间:2011-09-16 09:21:23

标签: linq entity-framework

执行此代码时出现异常:

var result = from menu in menuBus.GetMenus()
             orderby menu.InternalName
             select new 
             {
                 Value = menu.ID.ToString(),
                 Text = menu.InternalName
             };

var result = allMenus.ToList();

错误消息显示:LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为存储的表达式。

所以,我猜Value = menu.ID.ToString()出了点问题。 ID属性定义为GUID(MS SQL中的UniqueIdentifier)。

有人有解决方案吗?

非常感谢!!!

2 个答案:

答案 0 :(得分:6)

在查询数据库后,您需要通过另一个查询运行列表。

var result = (from menu in menuBus.GetMenus()
                        orderby menu.InternalName
                        select new 
                        {
                            Value = menu.ID,
                            Text = menu.InternalName
                        }).ToList();


var result2 = (from menu in result select new {Value=menu.Value.ToString(),Text=menu.Text}).ToList();

答案 1 :(得分:1)

据我所知,你的linq查询中不能有.ToString(),因为linq to entity不知道如何处理它(因为它无法将它转换为sql语句)。你可以将选择部分作为

select new
{
     Value = menu.ID,
     Test = menu.InternalName
}

然后只需使用foreach循环并将值复制到另一个列表中,同时将guid转换为字符串