LINQ查询错误:运算符&不能应用于byte或bool

AM0*_*AM0 0 c# linq and-operator

我有以下linq查询,其中我试图从数据库获取特定id的记录.然后我浏览记录并尝试找到一个字节中的位被设置的记录.但我得到的错误是"运算符&不能应用于字节或bool":

        Byte firstPacketMask = Convert.ToByte("00001000", 2);

        using (aContext _db = new aContext())
         {
             var query = (from data in _db.Datas
                          where data.id == id 
                          orderby data.ServerTime descending //put the last cycle on top of list
                          select data).ToList();

             var mid = query.Where(x => x.Data[0] & firstPacketMask == 16)
                            .FirstOrDefault();

         }
Run Code Online (Sandbox Code Playgroud)

这里Data是一个字节数组.Data的第一个字节有位字段.我试图检查是否设置了第4位然后我选择了该数据包.

Mic*_*Liu 7

&优先级低于==,因此编译器将表达式解析为x.Data[0] & (firstPacketMask == 16).

添加括号以阐明优先级:

(x.Data[0] & firstPacketMask) == 16
Run Code Online (Sandbox Code Playgroud)

注意:它看起来像firstPacketMask等于8,所以与它相关x.Data[0]将产生0或8,从不16.也许你打算写

Byte firstPacketMask = Convert.ToByte("00010000", 2);  // bit 4 is set
Run Code Online (Sandbox Code Playgroud)

或者只是

(x.Data[0] & 16) == 16
Run Code Online (Sandbox Code Playgroud)