Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq使用更新的字段执行连接_C#_Linq - Fatal编程技术网

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

C# Linq使用更新的字段执行连接,c#,linq,C#,Linq,我有两个类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; }

我有两个类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);
var db=new MyDBContext();
IEnumerable result1=
来自tblA,单位为db.A
在tblA.classID上的db.B中加入tblB等于tblB.classID
选择tblA;
IEnumerable result2=db.A.Join(db.B,x=>x.classID,y=>y.classID,(x,y=>x);
我只能获取A中的所有成员,但A类中的
变量为空。我知道我需要从B中的点执行作业,但我不知道怎么做。正确的方法是什么?

您可以尝试以下方法:

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);
var result1=
(来自tblA,单位:db.A
在tblA.classID上的db.B中加入tblB等于tblB.classID
选择新的{ClassA=tblA,PointsOfB=tblB.points}).ToArray();//a、 甲级);

或者在一行中:

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; 
        });
IEnumerable classAList=db.A
.Join(db.B,a=>a.classID,B=>B.classID,(a,B)=>new
{ 
ClassA=a,
PointsOfB=b点
}).ToArray()//
{ 
ab.ClassA.points=ab.PointsOfB;
返回ab.ClassA;
});
但是您应该测试它。

您可以尝试以下方法:

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);
var result1=
(来自tblA,单位:db.A
在tblA.classID上的db.B中加入tblB等于tblB.classID
选择新的{ClassA=tblA,PointsOfB=tblB.points}).ToArray();//a、 甲级);

或者在一行中:

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; 
        });
IEnumerable classAList=db.A
.Join(db.B,a=>a.classID,B=>B.classID,(a,B)=>new
{ 
ClassA=a,
PointsOfB=b点
}).ToArray()//
{ 
ab.ClassA.points=ab.PointsOfB;
返回ab.ClassA;
});

但是你应该测试一下。

我想这就是你想要的

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

我想这就是你想要的

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

有没有办法创建类
a
而不是匿名类?然后需要赋值或重新创建类。我举个例子。问题是,您无法更新行。您需要在数据库中更新该行吗?这一行几乎成功了。当发生点赋值时,它抛出一个错误:
具有语句体的lambda表达式无法转换为表达式树。表达式树可能不包含赋值运算符
这是因为它要将其转换为表达式(iqueryable),我将更新它。如果要添加条件(where语句),则应在
ToArray()之前添加它
是否有方法创建类
a
而不是匿名类?然后您需要分配值或重新创建类。我举个例子。问题是,您无法更新行。您需要在数据库中更新该行吗?这一行几乎成功了。当发生点赋值时,它抛出一个错误:
具有语句体的lambda表达式无法转换为表达式树。表达式树可能不包含赋值运算符
这是因为它要将其转换为表达式(iqueryable),我将更新它。如果要添加条件(where语句),则应在
ToArray()之前添加它
有没有办法创建类
a
而不是匿名类?在这种情况下,您将把b的分数存储在哪里。。。另一种方法是创建一个新类,将classA和points作为其成员
B
中的点存储在
a
中。那么
A.points=B.points
。有没有办法创建类
A
,而不是匿名类?在这种情况下,您将把B的积分存储在哪里。。。另一种方法是创建一个新类,将classA和points作为其成员
B
中的点存储在
a
中。因此
A.points=B.points