Linq通过枚举值获取行

问题描述 投票:1回答:2

这是我定义的枚举值

public enum authaccess
{ read=0,create=1,update=2,delete=4}

访问表如下所示。

|id  | tablename |columnname|permitted|
|----|-----------|----------|---------|
|1   | cms       |header    |3        |
|2   | cms       |footer    |2        |
|3   | cms       |content   |7        |

允许对所有内容进行读访问,而3表示(创建+更新),7表示所有权限。

因为我需要在div中启用(x)按钮,其中loggedInUser具有删除权限

使用Linq,我用过

new DbContext().tbl_access.where(k=>k.permitted > authaccess.delete){divid.class.add('close')}

但无法找到获取用户可以更改的内容列表的方法,即3或(authaccess.create + authaccess.update)

[编辑澄清]结果表应该是

|id  | tablename |columnname|permitted|
|----|-----------|----------|---------|
|1   | cms       |header    |3        |
|2   | cms       |footer    |2        |

因为(页眉和页脚)包括小于或等于3的创建+更新级别访问。

在此先感谢您的帮助。

c# asp.net linq enums
2个回答
1
投票

看起来你的authaccess具有位屏蔽的值。对于您请求的create + update,编写Linq的可能方法是:

new DbContext().tbl_access
    .Where(k => (k.permitted & (int)authaccess.create) > 0) && 
                (k.permitted & (int)authaccess.update) > 0))

0
投票

你想要那样的东西吗?

var authAccessFilter = (int)authaccess.create + (int)authaccess.update;
var records = new DbContext().tbl_access.Where(k => k.permitted <= authAccessFilter).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.