Linq使用更新的字段执行连接

时间:2017-03-17 17:18:31

标签: c# linq

我有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点开始执行任务,但我不知道该怎么做。这样做的正确方法是什么?

2 个答案:

答案 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 });