Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#EF Linq逐位问题_Linq_Entity Framework_C# 4.0_Bit Manipulation - Fatal编程技术网

C#EF Linq逐位问题

C#EF Linq逐位问题,linq,entity-framework,c#-4.0,bit-manipulation,Linq,Entity Framework,C# 4.0,Bit Manipulation,例如,我使用的是按位的:星期一=1,星期二=2,星期三=4,星期四=8等等 我使用的是实体框架类业务 我使用一个类并传入一个值,如7(星期一、星期二、星期三) 我想返回与这些日期匹配的记录 public List<Business> GetBusinesses(long daysOfWeek) { using (var c = Context()) { return c.Businesses.Where(

例如,我使用的是按位的:星期一=1,星期二=2,星期三=4,星期四=8等等

我使用的是实体框架类业务

我使用一个类并传入一个值,如7(星期一、星期二、星期三)

我想返回与这些日期匹配的记录

    public List<Business> GetBusinesses(long daysOfWeek)
    {
         using (var c = Context())
         {
              return c.Businesses.Where(???).ToList();
         }
    }
public List getbusiness(长日每周)
{
使用(var c=Context())
{
返回c.business.Where(???).ToList();
}
}
任何帮助都将不胜感激。谢谢

编辑

好的,我正在尝试以下几点:

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(); 
var b=新列表();
var b1=新业务(){DaysOfWeek=3};
b、 添加(b1);
var b2=新业务(){DaysOfWeek=2};
b、 添加(b2);
var decomposedList=new[]{1};
var l=b.Where(o=>decomposedList.Any(day=>day==o.DaysOfWeek)).ToList();
但是我返回0个结果,假设在分解列表(1)中我正在寻找星期一。
我创建了b1以包含星期一和星期二。

您必须将长值(带位标记的枚举更好)分解为各个部分,然后将其传递到
中的

return c.Businesses.Where(o=> DecomposeDays(dayParam).Any(day => day==o)).ToList();
编辑: 分解方法:

private static IEnumerable<byte> DecomposeDays(byte dayParam)
{
    var daysOfWeek = new List<byte> { 1, 2, 4, 6, 8 ,16};
    return daysOfWeek.Where(o => (o & dayParam) == dayParam);
}
private静态IEnumerable DecomposeDays(byte dayParam)
{
var daysOfWeek=新列表{1,2,4,6,8,16};
返回daysOfWeek.Where(o=>(o&dayParam)=dayParam);
}

使用按位and运算符
&
将所需的标志与数据库中的实际标志组合起来,然后检查结果是否为非零

        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);
        }
如果您有一个简单组合的筛选器值数组,则首先使用OR
|

        var filterArray = new []{1, 4};
        var filter = filterArray.Aggregate((x, y) => x | y);

我是个笨蛋。你能解释一下如何分解long吗?如果你不能想出一个完整的解决方案,我会给你一个完整的工作答案。我想我想知道如何从long daysOfWeek属性创建分解列表,而不使用开关盒或类似的东西。好的,谢谢,我只是不知道是否有更干净的东西。这不适用于Linq to实体-SQL如何知道如何处理“DecomposeDays”?请不要以这种方式在关系数据库中存储数据。你们想在对象空间中这样做,好吧,但……好吧,我喜欢这个,但若过滤器是数组,我该怎么做呢?例如:var filter=[]{1,2}简单地或(
|
)首先将数组中的值放在一起,因为您需要其中的任何一个。e、 g.1 | 2等于3。您可以使用另一个。Where子句中的任何子句,但先使用或先使用它们更有效。