Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据LINQ to SQL中的变量选择列_C#_Linq To Sql - Fatal编程技术网

C# 根据LINQ to SQL中的变量选择列

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(); 这容易做到吗?我认为这既不可能,也不是一个好的做法。请注意,如果变量名

我正在我的应用程序中使用C中的LINQ to SQL。我需要能够根据变量选择行的一列。这对于行来说很容易,因为它是一个简单的where子句,但是我不知道如何只选择一个特定的列。以下是我目前的代码:

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);