二元谓词的左侧不能是文字表达式,它必须是有效的属性或功能性谓词表达式:PropertyName

Posted

技术标签:

【中文标题】二元谓词的左侧不能是文字表达式,它必须是有效的属性或功能性谓词表达式:PropertyName【英文标题】:The left hand side of a binary predicate cannot be a literal expression, it must be a valid property or functional predicate expression: PropertyName 【发布时间】:2017-11-05 10:47:35 【问题描述】:

我是微风 js 的新手。我的 spa 应用程序使用了轻量级、Knockout、EF 和 MVC 框架。

我的 POCO 实体定义是

public partial class Tbl_GLB_Library
    
        System.Guid ID  get; set; 
        public string FileName  get; set; 
        public string Extension  get; set; 
        public Nullable<long> Size  get; set; 
        public string Description  get; set; 
        public Nullable<System.DateTime> CreationTime  get; set; 
        public Nullable<System.DateTime> LastWriteTime  get; set; 
        public Nullable<System.DateTime> LastAccessTime  get; set; 
        public byte[] FileData  get; set; 
        public string FilePath  get; set; 
        public byte[] RowVersion  get; set; 

在客户端,我使用自定义构造函数添加了一个未映射的属性:

function addTbl_GLB_LibrariesProperties() 
        var metadataStore = Manager.metadataStore;
        metadataStore.registerEntityTypeCtor('Tbl_GLB_Library', null, Tbl_GLB_LibraryInit);

        function Tbl_GLB_LibraryInit(Library) 
            Library.FileContent = ko.observable();
        
    

获取元数据和一些数据后,我需要查询缓存的数据。

 query = breeze.EntityQuery.from("Tbl_GLB_Library").where(breeze.Predicate.create('FileContent', breeze.FilterQueryOp.Equals, null));

return Manager.executeQueryLocally(query);

此方案适用于所有映射的属性,但对于未映射的属性FileContent,会引发异常!我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您是否将 NamingConvention 设置为 camelCase?如果谓词的左手表达式是错误的情况,则会出现此错误消息。只需尝试将其更改为 fileContent,您就会很快知道这是否是问题所在。

【讨论】:

我正在使用 PascalCase 并且没有更改微风的设置。默认情况下,NameConvention 值为“NamingConvention.none”,表示“没有变化”。

以上是关于二元谓词的左侧不能是文字表达式,它必须是有效的属性或功能性谓词表达式:PropertyName的主要内容,如果未能解决你的问题,请参考以下文章

lambda表达式和for_each

获取复杂请求核心数据的谓词和表达式

谓词下推

二元谓词中添加const的问题(未解决)

查找列表和谓词的任何可能结合

STL学习思想