ku1gun
ku1gun

Reputation: 47

Dynamic column name in where clause. Entity Framework

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

Upvotes: 2

Views: 7851

Answers (4)

Hp93
Hp93

Reputation: 1535

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

Upvotes: 2

Vahid Farahmandian
Vahid Farahmandian

Reputation: 6566

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

Upvotes: 0

Junaid
Junaid

Reputation: 1755

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.

Upvotes: 2

StuartLC
StuartLC

Reputation: 107387

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

Upvotes: 0

Related Questions