Cyb*_*rew 7 linq entity-framework bit-manipulation c#-4.0
好吧,例如,我按照这样的方式使用:星期一= 1,星期二= 2,星期三= 4,星期四= 8等...
我正在使用Entity Framework类的Business.
我正在使用一个类并传递一个像7(星期一,星期二,星期三)的值.
我想返回与那些日子相匹配的记录
public List<Business> GetBusinesses(long daysOfWeek)
{
using (var c = Context())
{
return c.Businesses.Where(???).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.谢谢!
编辑
好的,我正在尝试以下方法:
var b = new List<Business>();
var b1 = new Business(){DaysOfWeek = 3};
b.Add(b1);
var b2 = new Business() { DaysOfWeek = 2 };
b.Add(b2);
var decomposedList = new[]{1};
var l = b.Where(o => decomposedList.Any(day => day == o.DaysOfWeek)).ToList();
Run Code Online (Sandbox Code Playgroud)
但是l返回0结果假设在decomposedList(1)我正在寻找星期一.我创建了包含星期一和星期二的b1.
使用按位和运算符&将所需的标志与数据库中的实际标志组合,然后检查非零结果.
var b1 = new { DaysOfWeek = 3 };
var b2 = new { DaysOfWeek = 2 };
var b = new[] { b1, b2 };
var filter = 1;
var l = b.Where(o => (filter & o.DaysOfWeek) != 0);
foreach (var x in l)
{
Console.WriteLine(x);
}
Run Code Online (Sandbox Code Playgroud)
如果您有一组过滤器值,只需将OR组合,然后|首先使用OR :
var filterArray = new []{1, 4};
var filter = filterArray.Aggregate((x, y) => x | y);
Run Code Online (Sandbox Code Playgroud)