При написании метода для службы oData у меня есть приведенный ниже linq, для которого мне нужно иметь динамическое предложение «где» для фильтрации результатов («новые» в соединениях для составных ПК в модели данных сущности):
var query = from pl in CurrentDataSource.ProductListing
join pla in CurrentDataSource.ProductListingAttribute
on new {pl.ProductID, pl.WebCategoryID, pl.ParentProductID}
equals new {pla.ProductID, pla.WebCategoryID, pla.ParentProductID}
join att in CurrentDataSource.Attribute
on pla.AttributeID
equals att.AttributeID
join attItem in CurrentDataSource.AttributeItem
on pla.AttributeItemID
equals attItem.AttributeItemID
select pl;
Мой Linq не очень хорош, и я пытаюсь использовать класс DynamicQueryable для создания предложения «где» во время выполнения (оно построено из различных переменных):
var returnData = query.Where(whereClause);
Поскольку предложение «где» фильтрует значения в сущностях Attribute и AttributeItem, оно неизменно содержит такие вещи, как
"((Attribute.Value='foo' AND AttributeItem.Value='bar')
OR
(Attribute.Value='sna' AND AttributeItem.Value='fu'))"
который завершится ошибкой во время выполнения, поскольку «Нет свойства или поля« Атрибут »в типе« Список продуктов »».
Я попытался создать анонимный тип в «выборе», который содержит все элементы объекта ProductListing и элементы из Attribute и AttributeItem, которые мне требуются для фильтрации, но мне нужен строго типизированный объект типа «ProductListing», чтобы вернуться из метода вызов.
Может КТО-НИБУДЬ, пожалуйста, помогите?? Должен ли я использовать динамические соединения вместо динамических Wheres? Есть ли способ определения местоположения сущностей, которые вы не выбираете? Должен ли я выбирать анонимный тип / "let" и впоследствии создавать строго типизированный объект?
Пожалуйста, любая помощь очень ценится.
рпосбо