2016-11-14 3 views

ответ

0

Непонятно, что вы хотите сериализовать: результат выражения Linq или выражение, которое вы можете использовать в последовательности.

IEnumerable<MyCollectionItem> MyCollection = ...; 
IEnumerable<MyItem> result = MyCollection.LinqQuery(...); 

Вы хотите сериализовать результат? или вы хотите сериализовать LinqQuery, так что вы можете использовать его позже на другой коллекции:

IEnumerable<MyItem> otherResult = OtherCollection.DeserializedLinqQuery() 

Первый легко: конвертировать результат в List<MyItem> и сериализации/deserizalize список.

Второй не представляется возможным, в конце концов, LinqQuery не более чем (возможно составного) функции расширения для IEnumerable

static class MyCollectionItemExtensions 
{ 
    public static IEnumerable<MyItem> MyLinqQuery(this IEnumerable<MyCollectionItem>(...) 
    { 
     ... 
    } 
} 

MyLinqQuery является функцией, только после того, как вы применили его к После этого вы получаете объект, по которому вы можете перечислить. Нелегко сериализовать функцию.

Однако, если MyLinqQuery является IQueryable, ваш запрос не является функцией, применяемой к элементам MyCollection, а тем, что имеет выражение, которое применяется к элементам MyCollection. Вы можете запросить IQueryable для его выражения и сериализовать его.

Есть несколько ответов о том, как это сделать в статье на StackOverflow: Serializing and deserialize expression tress

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

  • Нет связанных вопросов^_^