2012-09-14 98 views
2

我想動態地將列名置於我的選擇查詢中。我如何做到這一點?where子句中的動態列名稱。實體框架

public IEnumerable MyTable MySelect(string colName, string param) 
{ 
    using (MyEntities db = new MyEntities()) 
    { 
    var query = from res in db.MyTable 
    where res.colName.Contains(param) 
    select res; 
    return query; 
    } 
} 

回答

2

你試過res.Field<string>(colName)

public IEnumerable MySelect(string colName, string param) 
{ 
    using (MyEntities db = new MyEntities()) 
    { 
    var query = from res in db.MyTable.AsEnumerable() 
    where res.Field<string>(colName).Contains(param) 
    select res; 
    return query; 
    } 
} 

Here就是一個例子。

PS:我沒有編譯代碼,所以可能會給出錯誤。

+1

這是關於_Generic場和SetField方法(LINQ到數據集)_,但我用linq to entity並在「res.Field (colName)」中出現編譯器錯誤,即「MyTable不包含Field的定義並且沒有擴展方法可以找到接受DAL.MyTable類型的第一個參數的字段」。 – ku1gun

+0

我編輯了答案,所以如果你現在可以試試看?我用'db.MyTable.AsEnumerable()'替換了'db.MyTable'' – Junaid

+0

不幸的是,同樣的錯誤:'DAL.MyTable'沒有包含'Field'的定義,也沒有擴展方法'Field'接受第一個參數可以找到類型'DAL.MyTable'(你是否缺少使用指令或程序集引用?) – ku1gun

0

使用Expression(Of Func(Of TableName, Boolean))作爲輸入參數,以你的方法

Public Function SelectFirstOrDefault(ByVal filterExpr As Expression(Of Func(Of T, Boolean))) As T 
    Return _dbContext.Set(Of T).FirstOrDefault(filterExpr) 
End Function 

,那麼你可以按照以下稱之爲:

Public Function Select() As MyTypeInfo 
    dim expr = New Expression(Of Func(Of TableNameClass, Object))() {Function(x) x.Code, Function(x) x.LastModifiedDate, Function(x) x.Title} 
    SelectFirstOrDefault(expr) 
End Function