C# 将合并的行放入合并列表中

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

下面我有一个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 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()
            };