我有2个A和B类,其中我希望执行一个linq查询,返回A类(及其所有成员)以及B中的字段。
以下是我回来的课程:
public partial class A
{
// fields in A
public int classID { get; set; }
public string mem_1A { get; set; }
public string mem_2A { get; set; }
public int points { get; set; }
// ...
}
以下是我加入的课程:
public partial class B
{
// fields in B
public int classID { get; set; }
public string mem_1B { get; set; }
public string mem_2B { get; set; }
public int points { get; set; }
// ...
}
我尝试过以下变化,但我无法让它发挥作用。
var db = new MyDBContext();
IEnumerable<A> result1 =
from tblA in db.A
join tblB in db.B on tblA.classID equals tblB.classID
select tblA;
IEnumerable<A> result2 = db.A.Join(db.B, x => x.classID, y => y.classID,(x,y) => x);
我只获得A中的所有成员,但points
中的class A
变量为空。我知道我需要从B点开始执行任务,但我不知道该怎么做。这样做的正确方法是什么?
答案 0 :(得分:2)
你可以试试这个:
var result1 =
from tblA in db.A
join tblB in db.B on tblA.classID equals tblB.classID
select new { ClassA = tblA, PointsOfB = tblB.points };
它将创建一个包含tblA和tblB点的匿名类。
更新当前值:
var result1 =
(from tblA in db.A
join tblB in db.B on tblA.classID equals tblB.classID
select new { ClassA = tblA, PointsOfB = tblB.points }).ToArray(); // <-- note this....
foreach(var r in result1)
r.ClassA.points = r.PointsOfB;
IEnumerable<A> classAUpdated = result1.Select(a => a.ClassA);
或者在一行中:
IEnumerable<A> classAList = db.A
.Join(db.B, a => a.classID, b => b.classID,(a,b) => new
{
ClassA = a,
PointsOfB = b.points
}).ToArray () // <---------- to persist it
.Select(ab =>
{
ab.ClassA.points = ab.PointsOfB;
return ab.ClassA;
});
但你应该测试它。
答案 1 :(得分:1)
我认为这就是你想要的
var result2 = db.A.Join(db.B, x => x.classID, y => y.classID,(x,y) =>
new{classA = x,
pontOfB = y.points });
如果你想在classA中使用它,试试这个
var result2 = db.A.Join(db.B, x => x.classID, y => y.classID,(x,y) =>
new classA {
classId = x.classId,
mem_1a = x.mem_1a,
mem_1b = x.mem_1b,
points = y.points });