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

时间:2010-11-17 09:47:15

标签: c# linq-to-sql

我在我的应用程序中使用C#中的LINQ to SQL。我需要能够根据变量选择一行的列。这对于行很容易,因为它是一个简单的where子句,但我只是选择一个特定的列而感到茫然。到目前为止,这是我的代码:

var permissions = (from s in dc.Permissions where s.dashboardname == permission select s.[variablehere]).Single();

这很容易实现吗?

5 个答案:

答案 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)