在LINQ查询中使用按位运算

Rad*_*Rad 5 bitwise-operators

鉴于以下枚举

[Flags]
public enum Trans{
Purchase =1,
Sale=2,
All  = Purchase | Sale
};
Run Code Online (Sandbox Code Playgroud)

以下课程

public class Person
{
public string Name;
public Trans TransType;
}
Run Code Online (Sandbox Code Playgroud)

以及以下数据结构

var people = new List<Person>();
people.Add(new Person {Name="James", TransType = Trans.Purchase});
people.Add(new Person {Name="Nancy", TransType = Trans.Sale});
people.Add(new Person {Name="Heather", TransType = Trans.All});
people.Add(new Person {Name="Duane", TransType = Trans.All});
Run Code Online (Sandbox Code Playgroud)

我正在尝试查询符合某些条件的人的列表.

为所有人提供Trans.Purchase(詹姆斯,希瑟和杜安)

var query = from p in people where ( (p.TransType & Trans.Purchase) == Trans.Purchase) select p;
Run Code Online (Sandbox Code Playgroud)

让Trans.Sale(Nancy,Heather&Duane)的所有人

var query = from p in people where ( (p.TransType & Trans.Sale) == Trans.Sale) select p;
Run Code Online (Sandbox Code Playgroud)

我需要什么指定LINQ查询的WHERE子句中与回报大家要么 Trans.Purchase,Trans.Sale 或两者(即Trans.All)?(詹姆斯.南希,希瑟和杜安)

编辑 一些上下文 - TransType存储在数据库中,我试图写一个用户指定TransType的屏幕,一个SQL查询提取上面指定的数据

Ada*_*m S 10

您可以使用此查询:

var query = from p in people 
            where (p.TransType.HasFlag(Trans.Purchase) || p.TransType.HasFlag(Trans.Sale)) 
            select p;
Run Code Online (Sandbox Code Playgroud)

查询也可以这样写:

var query = from p in people 
            where ((p.TransType & Trans.All) > 0) 
            select p;
Run Code Online (Sandbox Code Playgroud)