[英]Dynamic linq not correctly apply on list of DynamicClass
我正在嘗試在DynamicClass列表上使用動態 linq 。 從外部來源我得到field.Name = "firstName"
和field.Value = "firstValue"
。
var dynamicIndexes = new List<DynamicClass>();
var props = new DynamicProperty[]
{
new DynamicProperty(field.Name, typeof(string))
};
Type type = DynamicClassFactory.CreateType(props);
var dynamicClass = Activator.CreateInstance(type) as DynamicClass;
dynamicClass.SetDynamicPropertyValue<string>(field.Name, field.Value);
dynamicIndexes.Add(dynamicClass);
var query = dynamicIndexes.AsQueryable();
bool isValid = query.Any("firstName eq \"firstValue\"");
但我得到isValid
作為false
。
我做了以下測試來理解這個問題:
在開頭添加以下代碼行,以覆蓋該值,然后我將isValid
設置為true
。
field.Value = "firstValue";
但是如果我將其更改如下,那么我將isValid
為false
。
byte[] utfBytes = Encoding.Default.GetBytes("firstValue");
field.Value = Encoding.Default.GetString(utfBytes);
我錯過了什么? 這個問題與編碼有關嗎?
更新
正如這里所建議的,這是動態 linq的限制。 您能否建議一個替代解決方案/庫來使用查詢表達式過濾 DynamicClass 列表。
該錯誤(並且動態鏈接表達式似乎存在錯誤)與編碼無關。 問題中的代碼甚至沒有使用不同的編碼; 只有一種編碼:默認編碼。 問題中的代碼沒有演示使用不同編碼或以其他方式更改編碼的場景,所以我不知道提問者如何得出不同編碼在這里發揮作用的結論......
相反,該錯誤似乎與字符串是否被實習有關。 query.Any("firstName eq \"firstValue\"");
如果firstName中的字符串實例是interned ,則只會按預期工作並產生true 。
如果字符串沒有被保留(這通常是在程序運行期間動態/以編程方式創建的字符串的情況),即使它的值恰好是“firstValue”,結果也會是false ,而不管字符串的實際值如何.
通過將 Encoding.Default.GetBytes/Encoding.Default.GetString 組合替換為:
var cc = "firstValue".ToCharArray();
field.Value = new string(cc);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.