Linq2sql->;如何按较低级别的实体进行分组并连接较高级别的数据
本文关键字:连接 数据 较高级 实体 何按 较低级 Linq2sql- gt | 更新日期: 2023-09-27 18:22:04
我有一个工具,应该在linq2sqlPagedList中显示一些聚合数据。
我的实体:
User -> UserSubSkill(with a Level info from 1 to 6) -> SubSkill -> Skill
因此定义了10种技能。每项技能都有很多辅助技能。用户的技能等级从1个初学者到6个专家。
我的搜索是筛选特定的技能和一定程度的专业知识。
我想向用户展示一种技能,在给定的熟练度水平下,存在一个指定的子技能。
显示器应为
User - Skill - Concatenated list of Subskills of this skill.
示例:
John Doe - Programming - Tool A (3), Tool B(5)
John Doe - Database - Tool DB_1 (5), Tool DB_2 (2)
Jane Dee - Programming - Tool A (1)
我现在正忙于c#中的Linq2SQL。
现在我有一个类似的东西:
ctx.UserSubSkill.Include(SubSkill).Include(Subskill.Skill).Include(User).Where(uss => uss.Level > 0 && subSkillsToSearch.Any(sts => sts == uss.SubSkillId))
其中subSkillToSearch是查询要查找的技能的所有子技能的列表。
我发现在创建更复杂的语句时使用查询语法更容易。我相信你正在寻找这样的东西:
var query =
from u in ctx.Users
from uss in u.UserSubSkills
where uss.Level > 0
where subSkillsToSearch.Contains(uss.SubSkillId)
group uss by new
{
u.ID,
UserName = u.Name,
SkillName = uss.SubSkill.Skill.Name
} into uss
select new
{
User = uss.Key.UserName,
Skill = uss.Key.SkillName,
SubSkillAndLearningList = uss.Select(x => x.SubSkill.Name + " (" + x.Level + ")")
.ToList()
};