自定义功能<>委托Linq where where子句

时间:2013-03-22 10:54:21

标签: c# linq func

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

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

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

患者的识别码是一个字节的arrya ......

感谢

2 个答案:

答案 0 :(得分:1)

原则上这样的事情应该有效:

return DbSet
  .Where(i => i.IdentificationCode.Length == bytes.Length)
  .FirstOrDefault();

如果你可以更清楚,那么我们可能会更有帮助。具体而言,如果DbSetPatient的集合,则可以告诉我们使用。

答案 1 :(得分:0)

如果字节的顺序是相等的一部分,那么您可以使用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上将其作为真正的方法或扩展方法,因为我怀疑你会使用它很多。

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