C# 将GUID转换为字符串实体框架

C# 将GUID转换为字符串实体框架,c#,linq,entity-framework,asp.net-mvc-3,linq-to-sql,C#,Linq,Entity Framework,Asp.net Mvc 3,Linq To Sql,冒着问一个重复问题的风险,我似乎无法使这一点起作用。我想做的事情有很多例子,但是语法不太一样,没有任何效果。我在自学Linq。此查询从SQL server获取ID列表。如果没有“ToString()”,则表示“无法将GUID转换为字符串[]”。请提前告知并感谢 public string[] GetAllRoleIDs(string param) { using (DBEntities de = new DBEntities())

冒着问一个重复问题的风险,我似乎无法使这一点起作用。我想做的事情有很多例子,但是语法不太一样,没有任何效果。我在自学Linq。此查询从SQL server获取ID列表。如果没有“ToString()”,则表示“无法将GUID转换为字符串[]”。请提前告知并感谢

    public string[] GetAllRoleIDs(string param)
    {           
        using (DBEntities de = new DBEntities())
        {
            string[] roleset = (from p in de.MySQLView
                         where p.anotherfield == param
                                select p.RoleID.ToString()).Distinct().ToArray();

            return roleset;
        }            
    }

您希望
AsEnumerable()
强制本地计算
ToString()
调用,而不是作为EF查询的一部分。例如:

using (DBEntities de = new DBEntities())
{
    string[] roleset = de.MySQLView
                         .Where(p => p.anotherfield == param)
                         .Select(p => p.RoleID)
                         .Distinct()
                         .AsEnumerable()
                         .Select(guid => guid.ToString())
                         .ToArray();
    return roleset;
}

(我把它从一个查询表达式转换为使用点表示法,只是因为两者之间的混合和匹配很麻烦,而且你只有一个
where
和一个
select
。当然,如果你愿意,你可以使用一个查询表达式。)

@user116923:这只是一种说法“直接调用扩展方法而不是使用查询表达式”。别担心:)