3

IQueryable の結果をオンザフライで挿入されたオブジェクトに変換できますか?

私は 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 {id = u.id, name = u.id, description = u.id};

次のようなものを使用したいと思います:

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

私が atm を持っている他の代替手段は、IEnumerable をループして、代わりに注入されたオブジェクトを使用して IEnumerable を作成することです。

4

2 に答える 2

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);
        }
于 2011-01-06T20:14:03.853 に答える
0

それは可能かもしれませんが、複雑さがあれば、uそれは悪い考えだと思います。

ある時点で、使用している ORM (Linq-to-SQL? EF?) をデータベースでの実行から .NET での実行に切り替える必要があります。その境界で、データベースから必要なデータを特定する必要があります。最初の例では、それは完全に明らかです: 必要なのはu.id. 2 番目の例ではわかりません。どのプロパティInjectFromがそこから読み取られるかがわからないため、念のため、UserCategories テーブルからすべての値をロードする必要があり、場合によっては関連するオブジェクトもロードする必要があります。

于 2010-12-19T17:54:39.000 に答える