c# - 使用 linq 加载除另一个集合之外的集合

标签 c# linq entity-framework linq-to-sql ef-code-first

我有这个搜索方法:

public List<Employeees> AutoSuggestEmployeee(string keyword,
    long employeeeTypeId, int count)
{
    return context.Employeees.Where(
        x => x.EmployeeeName.Contains(keyword)
        && x.EmployeeeTypeId == employeeeTypeId)
    .Take(count).ToList();
}

我有另一个员工集合,比如“BadEmployeees”,我想要的是使用与之前相同的方法返回除“BadEmployeees”之外的所有员工。

我试着这样写:

return context.Employeees.Where(
        x => x.EmployeeeName.Contains(keyword)
        && x.EmployeeeTypeId == employeeeTypeId)
    .Except(BadEmployeees).Take(count).ToList();

但它给出了一个异常(exception),Except 只能处理 Int、Guid 等数据类型,...

最佳答案

Except 方法进行比较,因此它必须知道如何比较对象。对于简单类型,有标准比较,但对于复杂类型,您需要提供一个相等比较器来比较对象中的相关数据。

例子:

class EmployeeComparer : IEqualityComparer<Employeees> {

  public bool Equals(Employeees x, Employeees y) {
    return x.Id == y.Id;
  }

  public int GetHashCode(Employeees employee) {
    return employee.Id.GetHashCode();
  }

}

用法:

return
  context.Employeees
  .Where(x => x.EmployeeeName.Contains(keyword) && x.EmployeeeTypeId == employeeeTypeId)
  .Except(BadEmployeees, new EmployeeComparer())
  .Take(count)
  .ToList();

关于c# - 使用 linq 加载除另一个集合之外的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7091834/

相关文章:

database - 使用多个数据库、共享资源和 EF 寻找 SaaS 的最佳方法

c# - 帮助 LINQ 表达式

c# - DeploymentItem 在单独的程序集中破坏了 EntityFramework 单元测试

c# - 如何使工具提示显示格式化文本?

c# - 如何在构建 UIImageView 时创建图像

c# - 当模棱两可地使用 IEnumerable 时,Linq 函数会给出奇怪的编译错误 - 可能的解决方法?

c# - 如何对具有相同子对象列表的对象进行分组?

c# - LINQ 中 select 中的 cast 和 as 之间的区别

c# - 如何在回调 channel 上抛出错误通知客户端?

c# - c#紧凑框架中的Directshow : trigger handling problems for a Filtergraph's IMediaEvent