我有两个表,它们之间有一对多关系,并且想要执行一个linq查询,该查询将从多个表中获取值,并从连接到每个表的值生成逗号分隔列表记录在另一张表中。我可以使用“stuff”函数和“for xml path”函数在sql中执行此查询。例如,假设我有以下表结构:
1)区
列:id,名称
2)商店
列:id,name,districtid
现在假设我想生成一个查询以返回以下列: district.id,district.name,stores(与该区域相关联的商店的逗号分隔列表)
如何通过linq实现这一目标?
我想在一个查询中没有任何for循环这样做。
答案 0 :(得分:5)
其他答案会考虑您拥有导航属性。 在这种情况下,您应该查看其他答案,因为在这种情况下,其他答案要简单得多。
var result =
from d in Districts
// gets all the store names in this district
let st = Stores.Where(s => s.DistrictId == d.Id).Select(s => s.Name)
select new { Name = d.Name, Id = d.Id, Stores = string.Join(",", st) }
答案 1 :(得分:0)
假设您有导航属性:
var q = from d in context.Districts
select new
{
DistrictID = d.id,
DistrictName = d.name,
Stores = String.Join(", ", d.stores.Select(s => s.name))
};
答案 2 :(得分:0)
如果您正在使用Linq-to-SQL,那么您必须已经使用导航属性创建了ORM类,然后您可以运行以下代码(我假设由于LINQ中的多元化,Store已转换为Store_s_等) :
var req = from dis in db.Disticts
select new {
ID = dis.id,
Name = dis.Name,
Stores =
String.Join(", ",
dis.Stores.Select( a => String.Format("{0}: {1}", a.Id, a.Name))
};