2010-12-19 18 views
2

IQueryableの結果を注入オブジェクトに変換することはできますか?LinqがValueinjecterで注入オブジェクトを選択

私はValueinjecterの助けを借りてこれを行うことができます知っている:

usercategory uc1 = new usercategory(example); 
usercategoryViewData ucVD1 = new usercategoryViewData(); 
ucVD1.injectFrom(uc1); 

ので、代わりにこの:

from u in db.usercategories 
where u.id==id 
select new usercategoryViewModel.InjectFrom(u);  

from u in db.usercategories 
where u.id==id 
select new usercategoryViewModel {id = u.id, name = u.id, description = u.id}; 

私は次のようなものを使用したいと思います私がatm持っているもう一つの選択肢は、IEnumerableをループし、代わりに注入されたオブジェクトで1つ作成することです。

+0

あなたがfoos.Selectような何かをしたいです(0 =>新しいバー()InjectFrom(O)。)? – Omu

答えて

2

は、私がこれを行うための2つの方法を示しています。

 public class Foo 
     { 
      public string Name { get; set; }    
     } 

     [Test] 
     public void TestMethod1() 
     { 
      var bars = new[] { new { Name = "aaa" }, new { Name = "bbb" } }; 
      IEnumerable<Foo> foos = bars.Select(o => new Foo().InjectFrom(o)).Cast<Foo>(); 

      IEnumerable<Foo> foos2 = from bar in bars 
         select new Foo().InjectFrom(bar) as Foo; 

      Assert.AreEqual(bars.First().Name, foos.First().Name); 
      Assert.AreEqual(bars.First().Name, foos2.First().Name); 
     } 
+0

は今のところはっきりしているようです。ありがとう。 – joeriks

+0

複数の結果セットを1つのコレクションに結合/結合することはどうですか?ありがとう。 – Saxman

+0

@Saxmanあなたはそのために.Unionを使用しなければならないと思います – Omu

0

uに複雑さがある場合は、それは悪い考えだと思います。

使用しているORM(Linq-to-SQL?EF?)は、データベースでの実行から.NETでの実行に切り替える必要があります。その境界では、データベースから必要なデータを探し出す必要があります。最初の例では、これは完全に明白です:u.idが必要です。 2番目の方法では、何も知らない:InjectFromが読み取るプロパティを知らないので、UserCategoriesテーブルからすべての値をロードする必要があります。ここ

+0

はい、同じ名前のプロパティ間にシンプル/デフォルトマップが必要です。マッパー関数の標準タスク。より複雑な場合は、LoopValueInjectionクラスを割り当てる必要があります。もちろん、 – joeriks

関連する問題