2016-11-14 4 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

입니다.