簡體   English   中英

動態 linq 未正確應用於 DynamicClass 列表

[英]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";

但是如果我將其更改如下,那么我將isValidfalse

   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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM