Map Linq选择使用ValueInjector注入对象

Map Linq选择使用ValueInjector注入对象,map,valueinjecter,Map,Valueinjecter,我可以将IQueryable结果动态转换为注入对象吗 我知道我可以在ValueInjector的帮助下做到这一点: usercategory uc1 = new usercategory(example); usercategoryViewData ucVD1 = new usercategoryViewData(); ucVD1.injectFrom(uc1); 因此,与此相反: from u in db.usercategories where u.id==id select new us

我可以将IQueryable结果动态转换为注入对象吗

我知道我可以在ValueInjector的帮助下做到这一点:

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

另一种方法是循环一个IEnumerable,然后用注入的对象创建一个。

虽然这是可能的,但如果
u
中有任何复杂性,我认为这是个坏主意


在某个时刻,您正在使用的ORM(Linq到SQL?EF?)需要从在数据库上执行切换到在.NET中执行。在这个边界上,它需要从数据库中计算出它需要什么数据。在第一个示例中,这一点非常清楚:它只需要
u.id
。在第二种情况下,它不知道将从中读取哪些属性,因此它需要加载UserCategories表中的所有值,也可能是相关对象,以防万一。

这里我展示了两种方法:

        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);
        }
公共类Foo
{
公共字符串名称{get;set;}
}
[测试]
公共void TestMethod1()
{
var bar=new[]{new{Name=“aaa”},new{Name=“bbb”};
IEnumerable foos=bar.Select(o=>new Foo().InjectFrom(o)).Cast();
IEnumerable foos2=从条到条
选择new Foo().InjectFrom(bar)作为Foo;
Assert.AreEqual(bar.First().Name,foos.First().Name);
Assert.AreEqual(bar.First().Name,foos2.First().Name);
}

是的,但我希望在同名属性之间建立一个简单/默认映射。映射器函数的标准任务。为了更复杂,我需要分配一个LoopValueInjection-class。您是否希望像foos.Select(o=>new Bar().InjectFrom(o))这样的东西?将多个结果集合并到一个集合中如何?谢谢。@ChuckNorris-请看我的问题[链接]。谢谢