我在我的应用程序中使用C#中的LINQ to SQL。我需要能够根据变量选择一行的列。这对于行很容易,因为它是一个简单的where子句,但我只是选择一个特定的列而感到茫然。到目前为止,这是我的代码:
var permissions = (from s in dc.Permissions where s.dashboardname == permission select s.[variablehere]).Single();
这很容易实现吗?
答案 0 :(得分:1)
是否可以更改数据库结构以使列成为行? (转动你的桌子?)
例如
Permissions Table
-----------------
Id
Dashboardname
Page1
Page2
Page3
...
并将其转换为
Permissions Table
-----------------
Id
Dashboardname
Pagename
然后你可以使用where子句来选择你想要的行吗?
答案 1 :(得分:1)
我不确定我完全理解你的问题,所以这可能有点过时了。但是,使用the LINQ Dynamic Query Library可以解决您的问题吗?
您可以使用DynamicQuery库 针对任何LINQ数据提供商 (包括LINQ to SQL,LINQ to 对象,LINQ to XML,LINQ to 实体,LINQ to SharePoint,LINQ to TerraServer等)。而不是使用 语言运算符或类型安全的lambda 构建你的扩展方法 LINQ查询,动态查询 库为您提供基于字符串的 您可以传递的扩展方法 任何字符串表达式。
有关示例和下载,请参阅上面的链接。
答案 2 :(得分:0)
我认为这不是可能的,也不是一种好的做法。请注意,如果变量名由用户提供,则他或她可以轻松获取所需的所有数据。也许你应该尝试使用enumeration和switch()子句?
答案 3 :(得分:0)
假设拥有权限的类名为Permission
,您可以定义扩展方法:
public static class PermissionExtensions
{
public static object SelectProperty(this Permission obj, string variable)
{
return obj.GetType().GetProperty(variable).GetValue(obj, null);
}
}
您可以在查询中使用此功能:
(from s in dc.Permissions where s.dashboardname == permission select s)
.Single().SelectProperty(variable);
这不会在查询中选择属性,而是从实例中获取属性。
答案 4 :(得分:0)
我想到的另一个答案是创建具有键值对的表,即
其中主键为(dashboard, key)
。