我正在努力通过linq2sql实现以下功能,但没有成功。
我有会员和参考表。 DB的设计方式是成员可以有多个(> = 0)引用。作为查询的结果,我想要的是成员的列表(行),其中成员的所有引用都被“收集”在一列中。
我所获得的是跟随查询,但是对于这个,每个参考都有一行。
var refs = (from m in db.Members
join
r in db.References on m.PID equals r.PID into g
from o in g.DefaultIfEmpty()
select new
{
member = m,
name = (o == null ? "" : o.NameSurname)
});
我觉得我需要插入一些SelectMany:)
您能否提出实现目标的提示?
答案 0 :(得分:1)
var refs = (from m in db.Members
select new
{
member = m,
name = String.Join(",",(from r in db.References on m.PID equals r.PID into g
from o in g.DefaultIfEmpty() select o.NameSurname).toArray())
}).Distinct();
这是未经测试的,但我认为这正是您所寻求的。它应该抓住你的成员并将所有引用加入到名称中。如果它不起作用,请告诉我,我会深入研究它。
答案 1 :(得分:0)
你的意思是这样的:
var refs = from m in db.Members
join r in db.References on m.PID equals r.PID into j
from o in j.DefaultIfEmpty()
select new { Member = m, Reference = o } into results
group result by result.Member into g
select g;
这会按成员(组的键)和与之关联的所有引用(与该键匹配的结果)对所有结果进行分组。
虽然你可能更好只是在ORM中设置关系然后你可以像这样引用(推测命名的)member.References属性:
foreach( var member in db.Members )
{
var allReferences = member.References;
}