2016-06-21 7 views
0

から継承するクラスをソートするためにLINQを使用しました。私は、たとえば、これを行うだろうTTYPE =パラメータ、</p> <pre><code>public class Parameter { public string VendorId { get; set; } public string RunMonth { get; set; } public string CoverageMonth1 { get; set; } } </code></pre> <p>リストをソートしたい場合は、リスト<TTYPE>

ParameterCollection parameterCollection;  
parameterCollection = parameterCollection.OrderBy(parameter => parameter.EffectiveDate); 

Severity Code Description Project File Line Category Suppression State 
Error CS0266 Cannot implicitly convert type 'System.Linq.IOrderedEnumerable<StateAssessment.Models.Parameter>' to 'StateAssessment.Models.ParameterCollection'. An explicit conversion exists (are you missing a cast?) StateAssessment.Services C:\Workspace\Healthcare-Finance_IT\Main\WebApps\StateAssessment\StateAssessment.Services\Parameter.cs 32 Compiler Active 

は中ParameterCollectionに鋳物を処理する方法はあります:私はList<Parameter>

 public class ParameterCollection : List<Parameter> 
    { 
      //handy properties added 
    } 

から継承するクラス、ParameterCollectionを、持っている場合、私はこのエラーを取得する何

List<Models.Parameter> ps = new List<Models.Parameter>() 
{ 
     new Models.Parameter() { EffectiveDate = new DateTime(2016, 1, 1) } 
     ,new Models.Parameter() { EffectiveDate = new DateTime(2014, 1, 1) } 
}; 

ps = ps.OrderBy(p => p.EffectiveDate).ToList<Models.Parameter>(); 

LINQステートメント?

+1

たぶん 'ToParameterCollection(このIEnumerableを ...'拡張メソッドを作成 –

+0

エリック:?はい、キャストは/ – ChadD

+0

ヤコブMassadを失敗しました?あなたは、このような方法の例を与えることができ – ChadD

答えて

0

要素を新しい順序で保持するには、新しいParameterCollectionを作成する必要があります。もちろん

var ps2 = new ParameterCollection(); 
ps2.AddRange(ps.OrderBy(p => p.EffectiveDate)); 
ps = ps2; 

、あなたが開始するIEnumerable<>を取るList<>オーバーロードに入り、コンストラクタのオーバーロードを作成することによって、自分のための人生を容易にすることができます。

ps = new ParameterCollection(ps.OrderBy(p => p.EffectiveDate)); 

IEnumerable<Parameter>の拡張方法を作成することもできます。

ps = ps.OrderBy(p => p.EffectiveDate).ToParameterCollection(); 

また、この方法で継承を使用すると、アンチパターンのビットであるため、完全にParameterCollectionを取り払う検討するかもしれません。

+0

私のコードでは、この型から継承するParametersCollectionクラス以外のLIST として定義されているオブジェクトはありません。したがって、あなたの例では、私はそうではありません。使用可能な型をソートするための、きれいな、願わくは簡潔な方法を探しています。ParametersCollection、私はLINQで弱く、時にはジェネリックで迷ってしまいますが、最高の解決策を期待しています。そこに住んでいるので、私は探していた助けを求めて答えにはこれらの技術を含める必要はありません – ChadD

+0

@ChadD:慎重に見れば、私の例の 'ps2'変数は' List 'タイプではないので、あなたが求めていることをしています。私はあなたにこの問題を解決するための4つの可能なアプローチを与えました。もう一つの考えられる方法は 'List <>'クラスから継承した 'Sort()'メソッドを使うことです。しかし、私はあなたがここに来ているアドバイスを無視しないように注意します。あなたは 'ParameterCollection'からどのような価値を得ていますか?代わりに 'List 'を使用するようにあなたのコードを変更した場合、何が欠けていますか? – StriplingWarrior

+0

申し訳ありませんが、あなたの例では、変数 "ps"がタイプLIST であり、新しいParametersCollectionオブジェクトに追加していたようです。私はリストのps変数を私の出発点として持っていませんでした。 "あなたが変更した場合...":リストコレクションのコレクションにのみ適用される追加されたメソッドがすべて失われていました。なぜこれがanit patetrnなのか分かりません。 – ChadD

関連する問題

 関連する問題