2 votes

Linq sélectionner pour objet injecté avec Valueinjecter

Puis-je convertir un résultat IQueryable en un objet injecté en vol ?

Je sais que je peux le faire avec l'aide de Valueinjecter :

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

Donc au lieu de ceci :

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

J'aimerais utiliser quelque chose comme :

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

L'autre alternative que j'ai actuellement est de boucler à travers un IEnumerable et de créer un avec des objets injectés à la place.

2voto

Omu Points 17372

Voici 2 façons de faire cela :

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

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

            IEnumerable 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);
        }

0voto

Rup Points 17863

Bien que cela soit possible, s'il y a une quelconque complexité dans u alors je pense que c'est une mauvaise idée.

À un moment donné, l'ORM que vous utilisez (Linq-to-SQL ? EF ?) doit passer de l'exécution sur la base de données à l'exécution dans .NET. À cette frontière, il doit déterminer quelles données il a besoin de la base de données. Dans le premier exemple, c'est complètement clair : il a seulement besoin de u.id. Dans le second, il n'a aucune idée : il ne sait pas quelles propriétés InjectFrom lira, il devra donc charger toutes les valeurs de la table UserCategories, et peut-être aussi des objets liés, juste au cas où.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X