2010-11-17 48 views
4

我在我的應用程序中使用C#中的LINQ to SQL。我需要能夠根據變量選擇一行中的一列。這對於行很容易,因爲它是一個簡單的where子句,但是我只是在選擇一個特定的列時處於虧損狀態。這是我的代碼到目前爲止:在LINQ to SQL中選擇基於變量的列

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

這很容易完成?

+0

你可能也想看看[此類似的問題(http://stackoverflow.com/questions/4214881/using-lambda-expression-to-select-different-fields-from-field-names/4214894# 4214894) – 2010-11-18 12:59:27

回答

1

是否可以更改數據庫結構以使列變成行? (樞軸桌嗎?)

例如。

Permissions Table 
----------------- 
Id 
Dashboardname 
Page1 
Page2 
Page3 
... 

,並把它變成

Permissions Table 
----------------- 
Id 
Dashboardname 
Pagename 

然後,你可以使用WHERE子句來選擇你想要的行?

0

我不認爲這是可能的或者是一個好的做法。請注意,如果變量名稱由用戶提供,他或她可以輕鬆獲取他們想要的所有數據。也許你應該嘗試使用枚舉和switch()子句?

+0

感謝您的回覆,變量不是由用戶提供的 - 變量只是頁面名稱,每個頁面都有一列。 – Chris 2010-11-17 09:50:39

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

這不選擇查詢中的屬性,而是從實例中獲取它。

1

我不確定我完全理解了你的問題,所以這可能有點偏離。但是,您的問題是否可以通過使用the LINQ Dynamic Query Library來解決?

可以使用DynamicQuery庫 反對任何LINQ數據提供 (包括LINQ到SQL,LINQ到 對象,LINQ到XML,LINQ到 實體,LINQ到SharePoint,LINQ到 TerraServer獲得等) 。除了使用 語言運算符或類型安全的拉姆達 擴展方法來構建你的 LINQ查詢,動態查詢 庫爲您提供了基於字符串 擴展方法,你可以通過任何 字符串表達式爲。

查看上面的鏈接瞭解樣本和下載。

0

是排在我的腦海裏的另一種答案是創建表鍵值對,即

  • 儀表盤
  • 關鍵

,其中主鍵是(dashboard, key)