c#LINQ to Entities无法识别方法' System.String ToString()'方法

时间:2014-10-30 09:31:53

标签: c# linq entity-framework

我想在数据库中选择多个列并存储在数组中但不断收到此错误

  

LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为商店表达式。

它应该返回类似“FunctionCode-ActivityCode”

的内容
public override string[] GetRolesForUser(string username)
{
    DEV_Context OE = new DEV_Context();
    string role = OE.UserRefs.Where(x => x.UserName == username).FirstOrDefault().RoleName;

    string[] result = OE.RolePermissionRefs
        .Where(x => x.RoleName == role && x.StatusCode == "A")
        .Select(x => new { FunctionCode = x.FunctionCode, ActivityCode = x.ActivityCode }.ToString())
        .ToArray();

    return result;
}

2 个答案:

答案 0 :(得分:1)

即使它可以工作,它也不会给你预期的结果。你在匿名对象上调用ToString。如果您只想连接值,可以尝试:

string[] result = OE.RolePermissionRefs
        .Where(x => x.RoleName == role && x.StatusCode == "A")
        .Select(x => new { x.FunctionCode, x.ActivityCode })
        .AsEnumerable()
        .Select(x => string.Join("-", x.FunctionCode, x.ActivityCode))
        .ToArray();

ToString无效的原因已在错误消息中说明。它无法转换为SQL。因此,您需要将结果加载到内存中(例如,使用{{1在上面的代码中),然后投影它们。

答案 1 :(得分:0)

ToString()仅在EF 6.0及更高版本中可用。在你的情况下,你可以在Select之前调用ToArray()并做一些像Selman建议的那样。