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

本文关键字:方法 String-ToString System to c#LINQ Entities 识别 | 更新日期: 2023-09-27 18:28:20

我想在DB中选择多列并存储在数组中,但一直收到这个错误

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

它应该向我返回类似"功能代码活动代码"的内容

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;
}

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

即使它能工作,也不会给您带来预期的结果。您正在对一个匿名对象调用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。所以您需要将结果加载到内存中(例如,在上面的代码中使用AsEnumerable),然后进行投影。

ToString()仅在EF 6.0及更高版本中可用。在您的情况下,您可以在Select之前调用ToArray(),然后执行Selman建议的操作。

相关文章: