bom*_*sen 5 linq linq-to-entities entity-framework
我在Linq to Entities中的查询有点麻烦,我希望有人可以说明:-)我想要做的是创建一个连接三个表的查询.
到目前为止它的工作原理,但由于我尝试加入的最后一个表是空的,查询的结果不包含任何记录.当我删除最后一个连接时,它会给我正确的结果.
我的查询如下所示:
var query = from p in db.QuizParticipants
join points in db.ParticipantPoints on p.id
equals points.participantId into participantsGroup
from po in participantsGroup
join winners in db.Winners on p.id
equals winners.participantId into winnersGroup
from w in winnersGroup
where p.hasAttended == 1 && p.weeknumber == weeknumber
select new
{
ParticipantId = p.id,
HasAttended = p.hasAttended,
Weeknumber = p.weeknumber,
UmbracoMemberId = p.umbMemberId,
Points = po.points,
HasWonFirstPrize = w.hasWonFirstPrize,
HasWonVoucher = w.hasWonVoucher
};
Run Code Online (Sandbox Code Playgroud)
我想要的是获取一些记录,即使Winners表是空的或者没有匹配.
任何帮助/提示都非常感谢!:-)
非常感谢提前.
/博
如果你把它们设置为相关实体而不是连接,我认为做你想做的事情会更容易.
var query = from p in db.QuizParticipants
where p.hasAttended == 1 && p.weeknumber == weeknumber
select new
{
ParticipantId = p.id,
HasAttended = p.hasAttended,
Weeknumber = p.weeknumber,
UmbracoMemberId = p.umbMemberId,
Points = p.ParticipantPoints.Sum(pts => pts.points),
HasWonFirstPrize = p.Winners.Any(w => w.hasWonFirstPrize),
HasWonVoucher = p.Winners.Any(w => w.hasWonVoucher)
};
Run Code Online (Sandbox Code Playgroud)
这是假设hasWonFirstPrize
并且hasWonVoucher
是布尔字段,但您可以使用任何聚合函数来获得所需的结果,例如p.Winners.Any(w => w.hasWonFirstPrize == 1)