C# 根据LINQ to SQL中的变量选择列
我正在我的应用程序中使用C中的LINQ to SQL。我需要能够根据变量选择行的一列。这对于行来说很容易,因为它是一个简单的where子句,但是我不知道如何只选择一个特定的列。以下是我目前的代码:C# 根据LINQ to SQL中的变量选择列,c#,linq-to-sql,C#,Linq To Sql,我正在我的应用程序中使用C中的LINQ to SQL。我需要能够根据变量选择行的一列。这对于行来说很容易,因为它是一个简单的where子句,但是我不知道如何只选择一个特定的列。以下是我目前的代码: var permissions = (from s in dc.Permissions where s.dashboardname == permission select s.[variablehere]).Single(); 这容易做到吗?我认为这既不可能,也不是一个好的做法。请注意,如果变量名
var permissions = (from s in dc.Permissions where s.dashboardname == permission select s.[variablehere]).Single();
这容易做到吗?我认为这既不可能,也不是一个好的做法。请注意,如果变量名由用户提供,则用户可以轻松获取所需的所有数据。也许您应该尝试使用枚举和开关子句?是否可以更改数据库结构,使列变为行?旋转你的桌子 例如 把它变成
Permissions Table
-----------------
Id
Dashboardname
Pagename
然后,您可以使用where子句选择所需的行。如果持有权限的类名为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);
这不会在查询中选择属性,而是从实例中获取属性。我不确定我是否完全理解您的问题,因此这可能有点离题。但是你的问题也许可以通过使用来解决吗 您可以使用DynamicQuery库 针对任何LINQ数据提供程序 包括LINQ到SQL、LINQ到 对象,LINQ到XML,LINQ到 实体,LINQ到SharePoint,LINQ到 TerraServer等,而不是使用 语言运算符或类型安全lambda 扩展方法来构造 LINQ查询,动态查询 库为您提供了基于字符串的 可以传递的扩展方法 将任何字符串表达式转换为
有关示例和下载,请参见上面的链接。我想到的另一个答案是创建带有键值对的表,即 仪表板 钥匙 价值
其中主键是dashboard,key。感谢您的回复,变量不是由用户提供的-变量只是页面名称,每个页面都有一列。您可能还需要查看
(from s in dc.Permissions where s.dashboardname == permission select s)
.Single().SelectProperty(variable);