C#EF Linq逐位问题
例如,我使用的是按位的:星期一=1,星期二=2,星期三=4,星期四=8等等 我使用的是实体框架类业务 我使用一个类并传入一个值,如7(星期一、星期二、星期三) 我想返回与这些日期匹配的记录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(
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子句中的任何子句,但先使用或先使用它们更有效。