System.NotSupportedException:LINQ to Entities中不支持指定的类型成员'UserPrincipalName'

时间:2015-03-27 22:18:19

标签: entity-framework entity-framework-6

此查询有什么问题:

var user = context.Users.Single(u => u.UserPrincipalName == "test@company.l");

为什么我会得到这个例外?

UserPrincipleName是用户属性...

System.NotSupportedException: The specified type member 'UserPrincipalName' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

当我这样做时一切都很好:

var users = context.Users.ToList();
var user = users.Single(u => u.UserPrincipalName == "test@company.l");

为什么单个Linq对象而不是Linq to Entities?

2 个答案:

答案 0 :(得分:0)

必须将

UserPrincipalName映射到数据库中的列。 EF尝试将lambda表达式u => u.UserPrincipalName == "test@company.l"转换为sql脚本,如果UserPrincipalName属性未映射到表列,则会抱怨。

答案 1 :(得分:0)

如果这是IdentityElement的属性,则定义如下:

    [ConfigurationProperty(ConfigurationStrings.UserPrincipalName)]
    public UserPrincipalNameElement UserPrincipalName
    {
        get { return (UserPrincipalNameElement)base[ConfigurationStrings.UserPrincipalName]; }
    }

http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Configuration/IdentityElement.cs,d784c9ed0cd1b486

它返回一个字符串,这就是为什么你可以将它与linq一起用于对象,但是EF不能将它转换为SQL,因为它通过在基类中转换一些属性来获取值。