根据LINQ to SQL中的变量选择列
我在我的应用程序中使用C#中的LINQ to SQL。 我需要能够根据变量选择一行的列。 这对于行很容易,因为它是一个简单的where子句,但我只是选择一个特定的列而感到茫然。 这是我到目前为止的代码:
var permissions = (from s in dc.Permissions where s.dashboardname == permission select s.[variablehere]).Single();
这很容易实现吗?
是否可以更改数据库结构以使列成为行? (透视你的桌子?)
例如。
Permissions Table ----------------- Id Dashboardname Page1 Page2 Page3 ...
把它变成
Permissions Table ----------------- Id Dashboardname Pagename
那么你可以使用where子句来选择你想要的行吗?
我不确定我完全理解你的问题,所以这可能有点过时了。 但是,使用LINQ动态查询库可能会解决您的问题吗?
您可以对任何LINQ数据提供程序使用DynamicQuery库(包括LINQ to SQL,LINQ to Objects,LINQ to XML,LINQ to Entities,LINQ to SharePoint,LINQ to TerraServer等)。 动态查询库不是使用语言运算符或类型安全的lambda扩展方法来构造LINQ查询,而是为您提供了可以将任何字符串表达式传递到的基于字符串的扩展方法。
有关示例和下载,请参阅上面的链接。
我认为这不是可能的,也不是一种好的做法。 请注意,如果变量名由用户提供,则他或她可以轻松获取所需的所有数据。 也许你应该尝试使用枚举和switch()子句?
假设拥有权限的类名为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);
这不会在查询中选择属性,而是从实例中获取它。
我想到的另一个答案是创建具有键值对的表,即
- 仪表板
- 键
- 值
主键是(dashboard, key)
。