我在下面的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"
}
}
}
}
我希望稍微澄清一下。
答案 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()
};
但这看起来很难看。