gpt4 book ai didi

c# - LINQ to Entities 中的 Enum.HasFlag?

转载 作者:可可西里 更新时间:2023-11-01 08:55:52 27 4
gpt4 key购买 nike

我有一面旗帜,例如

[Flags]
public enum DaysOfTheWeek
{
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
Saturday = 32,
Sunday = 64
}

如果我想使用 Linq 基于包含特定标志的变量进行过滤,我可以尝试使用 Enum.HasFlag在 lambda 语句中过滤多个标志,例如

DaysOfWeek weekendFilter = DaysOfTheWeek.Saturday | DaysOfTheWeek.Sunday;
var weekends = allDays.Where(d => d.DayOfWeek.HasFlag(weekendFilter));

目前给出:

LINQ to Entities does not recognize the method 'Boolean HasFlag(System.Enum)' method, and this method cannot be translated into a store expression.

最佳答案

枚举标志基于二元运算。

HasFlag = (allDays & (DaysOfTheWeek.Saturday | DaysOfTheWeek.Sunday)) != 0;

如果您愿意,您可以将其抽象为扩展方法。

具体回答你的问题:

DaysOfWeek weekendFilter = DaysOfTheWeek.Saturday | DaysOfTheWeek.Sunday;
var weekends = allDays.Where(d => (d.DayOfWeek & weekendFilter) != 0);

我知道您可以将此谓词与 LINQ to SQL 结合使用。它将被翻译成 SQL(SQL Server 很好地支持二进制算法)。不确定 EF 是否同样有能力,因为它的 LINQ 支持通常远不如 L2S。

关于c# - LINQ to Entities 中的 Enum.HasFlag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12306858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com