2013-08-21 20 views
5

私は現在、以下のクラスで構成されたList<T>ありますリスト内の変数の一覧<string>をゲット<T>

int id { get; set; } 
string title { get; set; } 
string description { get; set; } 

は、私がリストにタイトルの唯一すべてList<string>を作成したい

これを行うにはどのパフォーマンスが最適でしょうか?

編集 私の説明フィールド平均2kの文字が...私はそれがのみなっタイトルを遅くしたくありません。

編集2 私はMVCのコードを最初に使用しています(Entity Framework)。 List<T>は_contextに格納されています。これはデータを取得するために私が照会します。

編集3可能であれば、タイトルAND IDを取得する方法はありますか?

+1

なぜ 'description'プロパティがタイトルを取得するのが遅くなると思いますか?リストは既に初期化されていますか?あなたはいつもそれをメソッドにロードしていますか?多分それが必要な場合は、代わりにフィールドを使用することができます。サイドノート:[.NET命名規則](http://msdn.microsoft.com/en-us/library/ms229043.aspx)に従ってください。プロパティは[パスカルケース](http://msdn.microsoft.com/en-us/library/x2dbyw72(v = vs.71).aspx)にする必要があります。 –

+0

私は自分の質問を更新しました。 foreachループで_contextを呼び出すと、新しいリストに結果が追加され、2つの結果に約2秒かかります。 – TheGeekZn

答えて

14

私はあなたがSelectを経由して投影を使用することができます一覧で唯一、すべてのタイトルの

List<string>を作成したいです。

var list = new List<SomeClass>(); 

var titleList = list.Select(x => x.title).ToList(); 

LINQ拡張メソッドの詳細については、Getting Started with LINQ in C#を参照してください。

可能であれば、タイトルAND IDを取得する方法はありますか?

あなたは1つのリスト内のすべての3つのプロパティ入れてAnonymous Typeを使用することができます。これを行うための最良のパフォーマンスの方法だろう

var entityList = list.Select(x => new { x.title, x.id, x.description }).ToList(); 

を?

var list = new List<SomeClass>(); 
var titleList = new List<string>(list.Count); 

foreach(var item in list) 
{ 
    titleList.Add(item.title); 
} 

LINQは、単純なforeach文をアウトパフォームしませんが、それは違いはほとんどの場合、無視することができるので、あなたはベンチマークで評価しなければならないトレードオフです。 listがあなたのジェネリック型のList<T>ある

Microbenchmark

+0

なぜ私はLINQでクエリ構文とメソッド構文をリンクするのか分かりません。 –

+2

OPに慣れていないlinqのさまざまな拡張方法について説明しています。あなたが良いリンクを知っていれば、私はそれを交換することができます。 – Romoku

+0

foreachループを使用すると、結果を得るのに〜4秒かかりました。 .Select()を使用すると、約0.7秒に短縮されました。 – TheGeekZn

4
list.Select(o => o.title).ToList(); 

8

あなたはEntity Frameworkのを使用しているようにあなたがList<T>からList<string>を作成しないでしょう。その場合には、サウンド - あなたの_contextから直接List<string>を照会します:

var titles = _context.MyTable.Select(x => x.title).ToList(); 

とはい、することができます一緒にタイトルとIDを取得:

var titleAndIds = _context.MyTable.Select(x => new{ x.title, x.id}).ToList(); 

これはあなたTプロパティtitleとを含んで匿名型であるList<T>を与えます。

+1

+1エンティティフレームワークを検討する場合 – Habib

+0

+1私はEFを使っていますが、答えの他の変種はこの謎を本質的に解決します。しかし、私は別のコグを投げるために私の質問を更新しました。 – TheGeekZn

+0

ですが、これだけがEdit2に関わっており、説明を考慮していません。 –

関連する問題