2016-11-14 11 views

答えて

0

Linq式の結果、またはシーケンスで使用できる式は、シリアル化したいものが不明です。

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

結果をシリアル化しますか?またはあなたが別のコレクションで、後でそれを使用することができますので、LinqQueryをシリアライズしたいん:

IEnumerable<MyItem> otherResult = OtherCollection.DeserializedLinqQuery() 

最初は簡単です:List<MyItem>に結果を変換し、シリアライズ/リストをdeserizalize。 IEnumerableを

秒すべての後、LinqQueryは(可能なコンポジット)拡張機能以外の何ものでもありません、実際には不可能である

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

MyLinqQueryは、あなたがそれを適用した後にのみ、機能ですシーケンスでは、列挙できるオブジェクトを取得します。関数をシリアライズするのは簡単ではありません。

MyLinqQueryがIQueryableの場合、クエリはMyCollectionの要素に適用される関数ではなく、MyCollectionの要素に適用される式を持つものです。その式をIQueryableに問い合わせて、その式をシリアライズすることができます。

この記事では、これを行う方法についていくつかの回答があります。StackOverflow: Serializing and deserialize expression tress

関連する問題