无法查询私有成员支持的LINQ字段

时间:2014-11-12 10:39:51

标签: c# linq

我有这个C#类声明:

public class Cookie : INotifyPropertyChanged
{
    .....
    [Column(Name = "CookieID", IsPrimaryKey = true, IsDbGenerated = true)]
    public int Id { get; set; }

    [Column(Name = "CookieName")]
    private string _name;
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
            OnPropertyChanged(@"Name");
        }
    }
}

我在VB.net中执行以下查询:

m_Data.Cookies.Any(Function(x) x.Name = "selectedproject")

遇到错误“成员'DataModel.Cookie.Name'没有支持的SQL转换。”

改为查询Id属性,或更改name属性,如下所示:

[Column(Name = "CookieName")]
public string Name { get; set; }

工作正常,但后来我无法生成PropertyChanged事件,我需要通知UI字段更改。有没有办法使属性可以转换为SQL,同时保留通知能力?

1 个答案:

答案 0 :(得分:1)

当Linq执行查询时,其中的任何属性都必须映射到数据库,因为SQL查询无法运行C#代码。

将您的代码更改为:

[NotMapped]
private string _name;
[Column(Name = "CookieName")]
public string Name

(实际上,我不确定私有属性是否会映射到SQL,但我已经添加了[NotMapped]属性以防万一)。

通过将带有getter / setter的属性映射到数据库,您可以通过它进行查询(从数据库中读取数据时,它将根据表列进行查询)。

注意:只要从数据库中读取数据,就会调用setter,因此您应该修改代码,以便仅在_name不为null时调用OnPropertyChanged。