将连接的行放入合并列表中

时间:2014-04-07 16:13:09

标签: c# sql linq

我在下面的LINQ to 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
            {
                Name = "33"
                Id = 33
            }
        }
    },
    Entity
    {
        Id = 1,
        Name = "1",
        Items
        {
            AEntity
            {
                Id = 44,
                Name = "44"
            }
        }
    },
    Entity
    {
        Id = 2,
        Name = "2",
        Items
        {
            AEntity
            {                    
                Id = 55,
                Name = "55"
            }
        }
    }
}

但我想要这个:

{
    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"
            }
        }
    }
}

我希望稍微澄清一下。

1 个答案:

答案 0 :(得分:2)

另一个人再次成为"试图在Linq"中做SQL的受害者。正确的方法(在Linq中)是...... *

var items = context.Entities.Include(x => x.AEntities).ToList();

但是,如果您正在尝试学习使用ORM,那么所有的爱都不能使用LINQ2SQL。它破碎,不受支持和过时。

请使用实体框架。

现在你应该谷歌实体框架多对多或一对多关联。

失败了......

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

但这看起来很难看。

* Table 2 looks like the age old pattern of, "Databases can't do Many to Many, so we are going to put in an intermediate table that has no data what-so-ever".