C# Linq使用更新的字段执行连接
我有两个类A和B,我希望在其中执行linq查询,返回类A(及其所有成员)以及B中的字段 下面是我要返回的班级: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; }
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
。