我可以动态将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);
我有另一个选择是循环IEnumerable并用注入的对象创建一个。
答案 0 :(得分: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);
}
答案 1 :(得分:0)
虽然这可能是可能的,如果u
中有任何复杂性,那么我认为这是一个坏主意。
在某些时候,你正在使用的ORM(Linq-to-SQL?EF?)需要从在数据库上执行切换到在.NET中执行。在那个边界,它需要从数据库中找出它需要的数据。在第一个例子中,这是完全清楚的:它只需要u.id
。在第二个它不知道:它不知道什么属性InjectFrom
将从中读取,因此它将需要加载UserCategories表中的所有值,也可能需要加载相关对象,以防万一。 / p>