gpt4 book ai didi

c# - 如何使用 LINQ 将行转换为列来旋转数据

转载 作者:太空宇宙 更新时间:2023-11-03 16:48:45 25 4
gpt4 key购买 nike

我使用 LINQ 编写了以下查询通过将行转换为列来旋转数据:

var query = from p in context.PrivilegesTable
group p by p.Type into g
select new Privileges
{
Type = g.Key,
AllowRead = g.Any(p => p.Seq == 1),
AllowAdd = g.Any(p => p.Seq == 2)
AllowEdit = g.Any(p => p.Seq == 3)
AllowDelete = g.Any(p => p.Seq == 4)
};

我认为有更好的方法来实现它。有关详细信息,请阅读以下内容:

我有以下权限表:

      Type    Seq
1 1
2 1
2 2
3 1
3 2
3 3

以及以下权限类:

class Privileges
{
public int ID { get; set; }

public Type Type { get; set;}

public int AllowRead { get; set; } // when sequence = 1
public int AllowAdd { get; set; } // when sequence = 2
public int AllowEdit { get; set; } // when sequence = 3
public int AllowDelete { get; set; } // when sequence = 4
}

现在,我想创建一个 List<Prvileges>使用 LINQ 得到以下结果:

[类型、AllowRead、AllowAdd、AllowEdit、AllowDelete]

[1, 真, 假, 假, 假]

[2, 真, 真, 假, 假]

[3, 真, 真, 真, 假]

我的查询对性能有影响吗?还有更好的吗?

最佳答案

我建议使用 enum 来表示您可以拥有的权限。

[Flags]
enum Privilege
{
None = 0,
Read = 1,
Add = 2,
Edit = 4,
Delete = 8,
}

通过这种方式,您可以存储一个值来表示您的所有权限。那么您的特权类将是这样的:

class Privileges {
public int ID { get; set; }
public Type Type { get; set;}
private Privilege m_Privileges;

public bool AllowRead {
get { return HasPrivilege(Privilege.Read); }
set { CheckPrivilege(Privilege.Read, value); }
}

public bool AllowAdd {
get { return HasPrivilege(Privilege.Add); }
set { CheckPrivilege(Privilege.Add, value); }
}

public bool AllowEdit {
get { return HasPrivilege(Privilege.Edit); }
set { CheckPrivilege(Privilege.Edit, value); }
}

public bool AllowDelete {
get { return HasPrivilege(Privilege.Delete); }
set { CheckPrivilege(Privilege.Delete, value); }
}

private bool HasPrivilege(Privilege p) {
return (m_Privileges & p) == p;
}

private void CheckPrivilege(Privilege p, bool owns) {
if (owns)
m_Privileges = m_Privileges | p;
else
m_Privileges = m_Privileges & (~p);
}
}

当然,这种方法只有在您拥有有限且已知的权限时才有效。

希望对你有帮助

关于c# - 如何使用 LINQ 将行转换为列来旋转数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4924032/

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