我在C#WPF应用中使用Entity Framework 6.0。我有这个查询来搜索Employee实体:
var query = Context.Employees.AsQueryable();
switch (selectedColumnValue)
{
case "lastName":
query = query.Where(q => q.lastName == SearchValue);
break;
case "employeeID":
query = query.Where(q => q.personnelID == SearchValue);
break;
case "securityID":
query = query.Where(q => q.securityID == SearchValue);
break;
default:
return;
}
父实体Employee
可能在EmployeeStatus
实体中有一些子行,以指示员工是否处于非活动状态,请假或存档。 Employee
实体的主键是employeeID
,并且是EmployeeStatus
上的外键。
以下是Employee实体的列:
public int employeeID { get; set; }
public string personnelID { get; set; }
public string securityID { get; set; }
public string firstName { get; set; }
public string middleName { get; set; }
public string lastName { get; set; }
public string suffix { get; set; }
public string job { get; set; }
public string organizationalUnit { get; set; }
public string costCenter { get; set; }
public string notes { get; set; }
public System.DateTime createdDate { get; set; }
这是EmployeeStatus实体的专栏
public int employeeStatusID { get; set; }
public int employeeID { get; set; }
public int validEmployeeStatusID { get; set; }
public Nullable<System.DateTime> exitDate { get; set; }
public System.DateTime createdDate { get; set; }
如果用户点击了复选框&#34;包含已存档的员工?&#34;在搜索过程中,我们需要加入EmployeeStatus
并添加EmployeeStatus
列validEmployeeStatusID
等于5
(已存档)的条件。你如何在LINQ中做到这一点?
更新:我需要在IF语句中的上述switch
语句之后添加Linq连接,例如:
if (IncludeArchived)
{
// Add to Linq query here using method syntax
}
所以Linq语句需要使用方法语法。
答案 0 :(得分:1)
这个查询怎么样?
query = (from empl in query
join status in Context.Status on empl.employeeID equals status.employeeID
where status.employeeStatusID == 5
select empl).Distinct();
或者您可以执行链:
query = query.Join(Context.Status, x => x.employeeID, x => x.employeeID, (a, b) => new { a, b })
.Where(x => x.b.employeeStatusID == 5).Select(x => x.a).Distinct();
答案 1 :(得分:1)
实际上,你不需要 来在switch语句之后添加它。
在您当前的实施中,您包括所有员工(甚至是已存档的员工)。因此,如果未选中复选框,您实际上需要进行此操作以排除已存档的文件。
注意:我假设您拥有实体的导航属性。
var query = Context.Employees.AsQueryable();
if (!IncludeArchived)
{
query = query.Where(e => e.Status == null || e.Status.employeeStatusId != 5);
}
switch (selectedColumnValue)
{
// ...
}