Member 8735045 Ответов: 1

Используя LINQ-запрос выборки динамическое собственность


Черт Возьми Все Это

Я использую
List<ExpandoObject>
но если мы используем linq в этот раз я не получу собственность

Что я уже пробовал:

<pre>  var grdfeatchobjlist = (List<ExpandoObject>)grdproductitem.ItemsSource;


var getlist = grdfeatchobjlist.Select(x => x.GetType().GetProperty("batchId") == Txtbatchcode.Text.ToString());

1 Ответов

Рейтинг:
0

Richard Deeming

Если имя свойства известно во время компиляции, приведите ExpandoObject к dyanmic, и получить доступ к собственности напрямую:

var getlist = grdfeatchobjlist.Select((dynamic x) => x.batchId == Txtbatchcode.Text);

Для динамического имени свойства, которое неизвестно до времени выполнения, приведите ExpandoObject к IDictionary<string, object>, и использовать индексатор:
var getlist = grdfeatchobjlist.Select((IDictionary<string, object> x) => x["batchId"] == Txtbatchcode.Text);


Member 8735045

Спасибо за комментарий Ричард , я стараюсь использовать это

Member 8735045

Я хочу этого ,
спасибо, Ричард.

var grdfeatchobjlist =grdproductitem.ItemsSource.Метод oftype&ЛТ;expandoobject и GT;().Выберите((динамически х) =&ГТ; х);

long StockId = конвертировать.ToInt64(stockId.Текст);


(из u в grdfeatchobjlist, где u.stockId == StockId select u).Список()
.По каждому элементу(у =&ГТ; {
u.newExpiryDate = конвертировать.Объект Todatetime(Txtexpierydate.Текст).ToString("гггг-ММ-ДД");
u.newSaleRate = Txtnewretailmerp.Text;
u.newMrp = Txtnewretailmerp.Text;
u.purchaseRate = Txtnewpurchasemrp.Text;
u.Status = "да";
u.createdby = LoginUserDetails.loginUserName.Метод toString();

});

Member 8735045

если
var datalist = JsonConvert.DeserializeObject<List<expandoobject>>(jsonResult, конвертер);
объект имеет значение null, что время ExpandoObject не может быть DeserializeObject

чего нам не хватает

Richard Deeming

Предполагая, converter является примером того, что ExpandoObjectConverter класс, этот код должен работать. Убедитесь, что свойство существует в ваших данных JSON и что вы правильно подобрали регистр этого свойства.

(Напр: stockId это не то же самое, что StockId или stockID.)

Member 8735045

Это мой json
{
"идентификатором": 1,
"оприд": 1,
"код продукта": 143654,
"stockId": 122104,
"батчид": 122104,
"rateId": 122104,
"короткое имя": "МСП",
"бачно": "150419",
"expiryDate": "2022-05-28",
"ППМ": 60.0,
"салерат": 60,0,
"purchaseRate": 13.74,
"количество": 500,0,
"storename для": "Главный Универсальный Магазин",
"newMrp": null,
"newSaleRate": null,
"newExpiryDate": null,
"newShortName": null,
"createdby": null,
"статус": null
}
Но только не нулевое значение, как "ППМ": 60.0, "saleRate": 60.0
и "newSaleRate": null, это не конвертация

Richard Deeming

Что JSON-это отдельный объект, а не список объектов.

Что десериализации JSON в один ExpandoObject включает в себя все null свойства, как и ожидалось.

Member 8735045

Множественный список json

{
"идентификатором": 1,
"оприд": 1,
"код продукта": 143654,
"stockId": 122104,
"батчид": 122104,
"rateId": 122104,
"короткое имя": "МСП",
"бачно": "150419",
"expiryDate": "2022-05-28",
"ППМ": 60.0,
"салерат": 60,0,
"purchaseRate": 13.74,
"количество": 500,0,
"storename для": "Главный Универсальный Магазин",
"newMrp": null,
"newSaleRate": null,
"newExpiryDate": null,
"newShortName": null,
"createdby": null,
"статус": null
},
{
"идентификатором": 1,
"оприд": 1,
"код продукта": 143654,
"stockId": 2018030010140000053,
"batchId": 2018030010200000033,
"rateId": 122104,
"shortName": null,
"бачно": "220",
"expiryDate": null,
"ППМ": 60.0,
"saleRate": 0.0,
"purchaseRate": 13.74,
"количество": 10.0,
"storeName": null,
"newMrp": null,
"newSaleRate": null,
"newExpiryDate": null,
"newShortName": null,
"createdby": null,
"статус": null
},

Я использую
var jsonSettings = новые JsonSerializerSettings()
{
DefaultValueHandling = DefaultValueHandling.Игнорировать,
Форматирование = Newtonsoft.Json.Форматирование.Изрезанный,
TypeNameHandling = TypeNameHandling.All,
NullValueHandling = NullValueHandling.Включать

};
но проблема все равно остается
я стараюсь изо всех сил
спасибо за ответ

Richard Deeming

После добавления недостающего [ и ] символы в ваш JSON, а также добавление ExpandoObjectConverter пример для подражания jsonSettings.Converters список, код все еще десериализует список с правильным null значение свойства.

var jsonSettings = new JsonSerializerSettings()
{
	DefaultValueHandling = DefaultValueHandling.Ignore,
	Formatting = Newtonsoft.Json.Formatting.Indented,
	TypeNameHandling = TypeNameHandling.All,
	NullValueHandling = NullValueHandling.Include,
	Converters = { new ExpandoObjectConverter() }
};

var dataList = JsonConvert.DeserializeObject<List<ExpandoObject>>(jsonResult, jsonSettings);


Вот демонстрация выполнения кода: .NET Скрипка[^]

Member 8735045

Спасибо Ричард
я проверил результат на своей стороне и получаю правильный результат в представлении результата,
если вы проверили как представление результатов, так и динамическое представление, я не могу получить newShortName в Dynamic Vewi. я думаю, что Dynamic Vewi был привязан к
грдпродуктитем.ItemsSource = dataList ;
вот почему свойство newShortName не может быть создано после JsonConvert.DeserializeObject< & gt;