我正在使用LINQ to Entities,並創建一個泛型類,可以根據用戶想要的字段在動態「Where」子句中進行標記在應用程序中搜索。動態LINQ到實體小數的格式「where」子句
這可以用在任何類型的實體在我的數據庫,所以我使用基於字符串的Where子句。
通過使用System.Linq.Dynamic,我已經有了一些基本的例子,例如,
字符串字段包含:
var data = db.Products;
var query = String.Format("{0} > @0", filter.property);
data = data.Where(query, filter.value);
這些例子都工作得不錯:
var data = db.Products;
var query = String.Format("{0}.Contains(@0)", filter.property);
data = data.Where(query, filter.value);
號碼字段大於。
我現在需要創建一個小數「等於」,但問題是數據庫中的貨幣值可能是10.3125,但它在應用UI中顯示爲10.31,所以如果用戶想要限制價格等於「10.31」,不會返回任何結果。我需要做的是通過查詢數據庫時限制的小數位的數量爲兩個,和比較,爲用戶的輸入十進制值,像這樣進行比較:
var data = db.Products;
var query = String.Format("Decimal.Round({0}, 2).Equals(@0)", filter.property);
data = data.Where(query, filter.value);
其中「filter.property」是列/字段名稱,「filter.value」包含十進制值。
但是,這將引發一個運行時錯誤:
An exception of type 'System.ArgumentException' occurred in System.Core.dll but was not handled in user code
Additional information: Argument types do not match
我似乎無法找到Where子句涉及十進制數字,或數字的格式基於字符串的LINQ的許多體面的例子。
有沒有關於如何使這項工作的建議?作爲最後的手段,我可以從表中取回所有數據,在存儲器中適當地格式化十進制數,然後將Where子句添加到內存中的結果集中,但是這會對資源造成很大影響。當然,有一種方法可以通過LINQ to Entities動態地執行此操作?
在此先感謝。
太棒了,謝謝! –