使用 linq 查询和实体框架进行检索
Posted
技术标签:
【中文标题】使用 linq 查询和实体框架进行检索【英文标题】:retrieving using linq query and entityframework 【发布时间】:2013-06-27 08:52:24 【问题描述】:我有如下表结构
员工表
ID Name
1 A
2 B
3 C
4 D
5 E
员工分配表
Alocationid ID Date
1 2 26/6/2013
2 2 25/6/2013
3 1 25/6/2013
4 1 24/6/2013
5 3 24/6/2013
6 4 26/6/2013
现在我需要获取特定日期的可用员工。例如,如果我需要 2013 年 6 月 25 日的可用员工,那么结果将如下所示:-
ID Name
1 A
3 C
4 D
【问题讨论】:
到目前为止你有没有尝试过? @subash 下次请指定语言并发布一些您已经拥有的代码 @subash 我不明白为什么结果是 25/6/2013 的 A/C/D ,而不是 A/B ? 我需要没有分配到特定日期的员工 【参考方案1】:101 Linq 是一个很好的参考站点,this sample 似乎最适合您的情况。
【讨论】:
【参考方案2】:如果您正在使用存储库并希望使用较少查询的方法,您可以使用以下方法:
IQueryable<int> allocatedEmployeeIds = AllocationRepository.DbSet.Where(x => x.Date == referenceDate).Select(x => x.ID);
List<Employee> allocatedEmployees = EmployeeRepository.DbSet.Where(x => allocatedEmployeeIds.Any(y => y == x.ID).ToList();
编辑:如果您想要那些未分配的,只需添加“!”
IQueryable<int> allocatedEmployeeIds = AllocationRepository.DbSet.Where(x => x.Date == referenceDate).Select(x => x.ID);
List<Employee> allocatedEmployees = EmployeeRepository.DbSet.Where(x => !allocatedEmployeeIds.Any(y => y == x.ID).ToList();
【讨论】:
【参考方案3】:使用组加入来获取每个员工的分配。然后选择那些在特定日期没有任何分配的员工:
from e in db.Employees
join ea in db.EmployeeAllocations
on e.ID equals ea.ID into g
where !g.Any(x => x.Date == date)
select e
【讨论】:
嗨,这不是我所期望的。上面的查询返回所有已经被分配到某个日期的员工..我需要所有没有被分配到某个日期的员工以上是关于使用 linq 查询和实体框架进行检索的主要内容,如果未能解决你的问题,请参考以下文章
LINQ 查询在 C# 中使用实体框架获取单列和单行值而不使用 Where
需要一种方法来使用实体框架核心中的C#Linq从第二个表中检索数据