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