2010-07-15 59 views
0

考慮:LINQ - 如何構建查詢當列名稱直到運行時才知道?

string metadata.XAxisColumn -- contains a column name (e.g., "Date") 
string metadata.YAxisColumn -- contains another columnname (e.g., "Close") 

當我知道列的前面的名字,我當然可以這樣做:

var query = from record in myView 
    where record.Date >= startDate && record.Date <= endDate 
    select record.Close 

但是,列名不知道,直到運行時。他們在metadata.XAxisColumnmetadata.YAxisColumn

什麼是構造是這樣的一個查詢的正確方式:

var query = from record in myView 
    where record.[metadata.XAxisColumn] >= startDate && record.[metadata.XAxisColumn] <= endDate 
    select record.[metadata.YAxisColumn] 
+0

對象(即記錄)是什麼類型? – 2010-07-15 19:39:39

+0

@Kieren - 他們是一個通用類型(我想這是問題的一部分) – 2010-07-15 19:56:32

回答

1

您使用ESQL/QueryBuilder的(內置在EF)或Microsoft動態查詢(又名動態LINQ - 免費通過VS代碼庫)。

1

你可以從「記錄」對象類型派生,並添加一個新的屬性:

public class MyRecord : RecordBase 
{ 
    public XAxis 
    { 
     get 
     { 
      switch (metadata.XAxisColumn) 
      { 
       // for example only; this code will not compile because it depends what kind of object RecordBase is :) 
      case X: 
       return this.X; 
      case Y: 
       return this.Y;   
      } 
     } 
    } 
} 

希望幫助!

+0

我明白你要去哪裏,雖然我真的不想去那裏,但很可能我會最終做這樣的事情。 (未來的代碼可維護性和所有......) – 2010-07-15 21:17:53

相關問題