C# 将合并的行放入合并列表中
下面我有一个LINQ到SQL的查询,它工作得很好,只是我想将从“table3”中选择的“items”放入一个实体对象中,而我得到的是一个具有相同Id但每行的不同项的新实体 我需要做什么来实现这一点 谢谢C# 将合并的行放入合并列表中,c#,sql,linq,C#,Sql,Linq,下面我有一个LINQ到SQL的查询,它工作得很好,只是我想将从“table3”中选择的“items”放入一个实体对象中,而我得到的是一个具有相同Id但每行的不同项的新实体 我需要做什么来实现这一点 谢谢 var result = from table1 in db.Table1 join table2 in db.Table2 on table1.fkId equals table2.fkId join table3 in db.Table3 on
var result =
from table1 in db.Table1
join table2 in db.Table2 on table1.fkId equals table2.fkId
join table3 in db.Table3 on table2.fkAid equals table3.Id into items
select new Entity
{
Id = table1.Id,
Name = table1.Name,
Items = items.Select(x => new AEntity { Id = x.Id, Name = x.Name }).ToList()
};
return result.ToList();
编辑以详细说明:
例如,从上面的代码中,我可以得到以下结果(伪代码):
但我想要这个:
{
Entity
{
Id = 1,
Name = "1",
Items
{
AEntity
{
Id = 33,
Name = "33"
},
AEntity
{
Id = 44,
Name = "44"
}
}
},
Entity
{
Id = 2,
Name = "2",
Items
{
AEntity
{
Id = 55,
Name = "55"
}
}
}
}
我希望这能澄清一点。另一个人再次成为“试图在Linq中执行SQL”的受害者。正确的方法(在Linq中)是* 但是,如果您试图学习使用ORM,出于对所有神圣事物的热爱,请不要使用LINQ2SQL。它已破损、无支撑且过时 请使用实体框架 现在,您应该使用google实体框架多对多或一对多关联 如果不行
var items = from item1 in db.Table1
select new
{
Id = table1.Id,
Name = table1.Name,
Items = db.Table3
.Where(x => db.Table2
.Where(t2 => t2.fkId == item1.fkId)
.Select(t2 => t2.fkAid)
.Contains(x.Id)).ToList()
};
但这看起来很难看
*谢谢,我添加了一些数据伪代码来澄清。是的,我通常使用实体框架,但在这种情况下我无法控制它……尽管如此,您的linq2sql看起来确实比其他解决方案更整洁,但是我得到了一个“委托”系统。Func不带1个参数”从表3的Where子句中……是的,我同意表2的说法。不管怎样,变量的类型不正确。现在开始工作了,非常感谢!对于linq2sql;)表示抱歉我还想知道一件事,如果我在项目下面的另一个字段上使用以下技术,它只会在其中一个字段上进行左外连接…另一个字段将被单独查询。这是为什么?怎么解决?我不知道你的意思。尝试修复Linq2SQL也不是失败的原因。首先,我从未看过Linq2SQL的源代码。
var items = context.Entities.Include(x => x.AEntities).ToList();
var items = from item1 in db.Table1
select new
{
Id = table1.Id,
Name = table1.Name,
Items = db.Table3
.Where(x => db.Table2
.Where(t2 => t2.fkId == item1.fkId)
.Select(t2 => t2.fkAid)
.Contains(x.Id)).ToList()
};