如何使用LINQ实现将关联查询结果映射到ObjView类实例
如何用LINQ关联A和B并创建ObjView实例?
我想了解如何使用LINQ实现以下需求:首先定义类ObjView,代码如下:
public class ObjView { public A aObj { get; set; } Public B bObj { get; set; } }期望编写关联查询,将A与B通过B_Id关联后,创建ObjView实例并为其成员赋值,我写的目标查询示例如下,但不确定是否正确:
var query = from a in A join b in B on a.B_Id equals b.B_Id select new ObjView(){ aObject.Item1 = a.Item1, aObject.Item2 = a.Item2, bObject.Item1 = b.Item1, bObject.Item2 = b.Item2, };
嗨,我来帮你梳理正确的实现方式!首先先修正两个小问题:
- 你的
ObjView类里Public是大写的,C#中访问修饰符关键字需要小写为public; - 你示例里的
aObject、bObject是笔误,应该对应类里的aObj、bObj属性。
第一步:修正ObjView类定义
public class ObjView { public A aObj { get; set; } public B bObj { get; set; } }
第二步:正确的LINQ关联查询
你原来的写法错误在于直接给aObj.Item1赋值,但aObj本身是A类型的对象,需要先实例化A和B的对象,再赋值给ObjView的对应属性。这里提供两种常见的LINQ写法:
方式一:查询表达式语法(和你原来的写法风格一致)
var query = from a in ACollection // 注意这里A、B应该是你的数据源集合,比如List<A>、IQueryable<A> join b in BCollection on a.B_Id equals b.B_Id select new ObjView() { aObj = new A() { Item1 = a.Item1, Item2 = a.Item2 }, bObj = new B() { Item1 = b.Item1, Item2 = b.Item2 } };
方式二:方法链语法(另一种常用的LINQ写法)
var query = ACollection.Join( BCollection, a => a.B_Id, b => b.B_Id, (a, b) => new ObjView() { aObj = new A { Item1 = a.Item1, Item2 = a.Item2 }, bObj = new B { Item1 = b.Item1, Item2 = b.Item2 } });
补充说明
- 确保
A和B类确实包含Item1、Item2、B_Id这些属性; - 如果你不需要创建新的
A、B实例,而是直接引用关联后的原对象,那可以简化为:
这种写法会直接把关联后的var query = from a in ACollection join b in BCollection on a.B_Id equals b.B_Id select new ObjView() { aObj = a, bObj = b };a和b对象赋值给ObjView的属性,适合不需要复制属性值,直接引用原对象的场景。
内容的提问来源于stack exchange,提问作者codegrid
相关产品推荐
相关产品推荐

