我有一个工具,应该在linq2sql PagedList中显示一些聚合数据。
我的实体:
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是查询所需技能的所有子技能的列表。
答案 0 :(得分:0)
我发现在创建更复杂的语句时更容易使用查询语法。我相信你正在寻找这样的东西:
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()
};