自定义Func<比;Linq where子句中的委托

本文关键字:子句 where Linq Func 自定义 | 更新日期: 2023-09-27 18:05:11

我应该自定义一个Func表达式,以便我应该检查其中的字节数组,如果这个数组等于POCO中的一个字段,则返回true .

所以我不知道如何定义它…

public Patient GetPatientByIdentificationCode(byte[] bytes)
    {
        return DbSet.Where(Func<>).FirstOrDefault();
    }

患者有一个identiationcode,它是一个字节数组…

谢谢

自定义Func<比;Linq where子句中的委托

原则上这样做是可以的:

return DbSet
  .Where(i => i.IdentificationCode.Length == bytes.Length)
  .FirstOrDefault();
如果你能说得更清楚,我们可能会更有帮助。具体来说,您可以使用DbSet是否是Patient的集合

如果字节的顺序是相等的一部分,那么您可以使用SequenceEqual:

return DbSet.Where(p => p.IdentificationCode.SequenceEqual(bytes)).FirstOrDefault();

如果顺序无关紧要,则可以检查元素是否相同且长度是否相同:

return DbSet.Where(p => 
                 p.IdentificationCode.Length == bytes.Length && 
                 p.IdentificationCode.Intersect(bytes).Count() == p.IdentificationCode.Length)
            .FirstOrDefault();

它可能比SequenceEqual慢,所以只在字节顺序不重要的情况下使用它。

作为旁注,我强烈建议将此作为Patient的真正方法或扩展方法,因为我怀疑您将经常使用它。

或者将其更改为比字节数组更容易比较(和显示)的类型