linq - 这是使用 LINQ 查询语法分配属性的更短方式吗?
问题描述
假设我有一个包含 30 个属性的对象列表(例如Items
:)
如果我将 LINQ Query-Syntax 用于Join
另一个对象(例如Store
:),我似乎不可避免地必须从 重新分配每个属性Item
,对吧?
例如:
var temp = from a in items
join b in stores on a.storeKey = b.storeKey into b2
from c in b2.DefaultIfEmpty()
select new ItemViewModel()
{
p1 = a.p1,
p2 = a.p2,
....
p30 = a.p2, //re-assign 30 times (T.T)
storeInfo1 = c.storeInfo1 //all i want is 1 or 2 additional info from store
}
解决方案
您可以使用AutoMapper等库。对于相同的属性名称,a
它ItemViewModel
可以使用反射为您进行映射,对于具有不同名称的属性,您可以定义手动映射,对于来自其他对象(b 和 c)的属性,您可以使用帮助程序。
像这样的东西:
var temp = from a in items
join b in stores on a.storeKey = b.storeKey into b2
from c in b2.DefaultIfEmpty()
select CreateModelFrom(a, b, c);
public ItemViewModel CreateModelFrom(ObjA a, ObjB b, ObjC c)
{
var model = Mapper.Map<ObjA, ItemViewModel>();
model.xxx = b.xxx;
model.storeInfo1 = c.storeInfo1;
return model;
}
推荐阅读
- java - AndroidManifest.xml 中预期的“类”或“接口”
- android - Android,在 RecyclerView 的每个项目下显示一个阴影(没有边距填充)
- java - Java中的二叉树不使用add方法
- java - 在 JAVA 应用程序中执行 XML 到 Copybook COBOL,反之亦然转换
- html - 响应式 CSS div 宽度
- javascript - JQuery AJAX 说加载函数不是函数
- perl - Perl - 使用未初始化的变量 $ftp
- javascript - 在浏览器中物理点击和以编程方式点击有什么区别
- php - 在 Laravel 5.5 PHP 中显示对话框并重定向到其他 URL
- c - C 分段错误:函数中的 fscanf