Dynamic column name in where clause. Entity Framework

青春壹個敷衍的年華 提交于 2019-12-20 03:18:02

问题


I want to dynamically place column name in my select-query. How I can do this?

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

回答1:


have you tried 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 is an example.

PS: I haven't compiled the code so might give error.




回答2:


Using dynamic linq:

using System.Linq.Dynamic;

public IEnumerable MyTable MySelect(string colName, string param)
{
  using (MyEntities db = new MyEntities ())
  {
     var query = db.MyTable.Where($"{colName} LIKE %{param}%");
     return query;
  }
}



回答3:


Have a look at the Dynamic Linq library and ScottGu's how to library here - it allows for dynamic filtering, sorting etc.




回答4:


use Expression(Of Func(Of TableName, Boolean)) as input parameter to your method

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

then you can call it as below:

    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


来源:https://stackoverflow.com/questions/12421916/dynamic-column-name-in-where-clause-entity-framework

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!