Entity Framework 6 + Generic – Prepare LINQ Where Query Criteria By String

Entity Framework 6 + Generic – Prepare LINQ Where Query Criteria By String

 
   using System;
   using System.Collections.Generic;
   using System.Data.Entity;
   using System.Data.Entity.Infrastructure;
   using System.Linq;
   using System.Linq.Dynamic;
   using SoccerDAO;
 
   public class GenericService
   {
      internal DbContext context;
 
      public GenericService(string name)
      {
         this.context = new SoccerContext(name);
      }
 
      … …
 
      public IQueryable<TEntity> GetItemByKey<TEntity>(int id) where TEntity : class
      {
         DbSet<TEntity> db_set = context.Set<TEntity>();
 
         string key = GetPrimaryKey<TEntity>().First();
 
         if (key != null)
         {
            string query = String.Format("{0} == {1}", key, id.ToString());
            return db_set.Where<TEntity>(query);
         }
         else
         {
            return null;
         }
      }
 
      public IQueryable<TEntity> GetItemByFieldValue<TEntity>(string fieldname, int value) where TEntity : class
      {
         DbSet<TEntity> db_set = context.Set<TEntity>();
 
         string query = String.Format("{0} == {1}", fieldname, value);
 
         return db_set.Where<TEntity>(query);
      }
 
      public List<string> GetPrimaryKey<TEntity>() where TEntity : class
      {
         List<string> keylist = new List<string>();
 
         var objectContext = (this.context as IObjectContextAdapter).ObjectContext;
         var entitySet = objectContext.CreateObjectSet<TEntity>().EntitySet;
 
         var KeyMemebers = entitySet.ElementType.KeyMembers;
 
         foreach(var item in KeyMemebers)
         {
            keylist.Add(item.Name);
         }
 
         return keylist;
      }
   }