2013-12-22 4 views
0

Я хочу исключить конкретное свойство из коллекции сущностей через odata.OData V3 exlude property

Я использовал .Expand («Files») для извлечения этой конкретной коллекции, это файлы в базе данных, и я хочу, чтобы все метаданные (такие как имя и MimeType) файла, но не сами бинарные тела ,

Мне не разрешено изменять службу OData, поэтому, если это вообще возможно, это необходимо сделать, используя инструкцию в запросе odata.

Любые мысли? Thx заранее.

UPDATE2: Вагиф был полезен, но дал мне понять, что я не правильно сформулировал свой вопрос. Еще раз: извинения. Фактическое свойство может быть в классе, который возвращается путем расширения «файлов», но он должен быть нулевым. Другими словами: я хотел бы, чтобы расширенные дочерние записи имели свойство, не заполняемое данными.

ОБНОВЛЕНИЕ: Thx nemesv. Я должен был быть более конкретным. Служба odata создается с использованием пакета odata nuget с использованием visual studio с использованием C#. Клиент использует те же инструменты. Однако сервер использует odata 5.0.1. Клиент любой версии, которую я хочу, (5.6 теперь я думаю).

+1

Как вы называете услугу odata? Какая библиотека использует? Используя синтаксис url, ваш запрос должен выглядеть так: 'http: // localhost/odata/YourThings? $ Expand = Files & $ select = YourProp, Files/Name, Files/MimeType' – nemesv

ответ

0

Если вы используете C# и LINQ на стороне клиента, вы можете выбрать свойства, которые вы хотите включить в составе полезной нагрузки с помощью Select статьи и анонимных типов, например:

результатов Var = context.MyCollection.Select (х => new {x.Name, x.Category});

UPDATE

Трюк с выбора столбцов из расширенного объекта является то, что вам не нужно явно расширить его: WCF Data Services LINQ заливка провайдер понять это. Вот пример использования модели данных Борей:

[Test] 
public void SelectProductAndCategoryColumns() 
{ 
    var result = _context.Products 
     .Where(x => x.ProductID == 1) 
     .Select(x => new { x.ProductID, x.Category.CategoryID, x.Category.CategoryName }) 
     .Single(); 
    Assert.AreEqual(1, result.ProductID); 
    Assert.AreNotEqual(0, result.CategoryID); 
    Assert.IsNotNull(0, result.CategoryName); 
} 

Обратите внимание, что я цепочки расширенных столбцов в окне Выбор пункта без использования Expand пункт. И он работает таким образом (но только на один уровень, вы не можете связать их дальше).

+0

Звучит неплохо, но как это сделать расширенный путь? var results = context.MyCollection.Expand («Файлы»). Выберите (x => new {x.Name, x.Files.Name}); ? –

+0

@GerbenRampaart, я обновил свой ответ, надеюсь, это поможет вам построить правильное утверждение. –

+0

Вы до сих пор оказывали огромную помощь (особенно в том, что я не хочу использовать Expand в этом сценарии, я этого не знал), но обратите внимание, что мой вопрос состоял в том, чтобы исключить свойство. Это решение заставляет вернуть анонимную функцию, нарушающую мой синтаксис для моей отложенной цепи. Другими словами, и принимая ваш пример, я хотел бы исключить ТОЛЬКО «CategoryName» (или lazy-load it, что не имеет значения). Поскольку в моем сценарии я хотел бы ленить загрузить свое свойство BLOB, он не должен включать байты в записи базы данных. (это нормально, если свойство все еще существует, но я бы хотел, чтобы оно было нулевым) –

Смежные вопросы