通过将Tablename,ColumnName和value作为参数传递来实体的动态Linq SearchFor

Shr*_*ppa 6 c# linq entity-framework

我需要编写一个IsExists(string TableName,string KeyColumnName,string ValueToCheck)在DAL中调用的函数,它检查数据是否存在于特定的表和我传递的特定列中

基本上我想在我尝试使用sql查询时实现类似的功能

select count(id) from "+TableName+" where "+keyColumnName+"="+ValueToCheck+";
Run Code Online (Sandbox Code Playgroud)

但我不能使用SQL查询..

在我的解决方案中,我有一个.edmx文件,一个实体类以及一个存储库类,它具有以下SearchFor方法:

public class EntityRepository<C, TEntity> : IEntityRepository<TEntity>
        where TEntity : class
        where C : DbContext
{
    public IQueryable<TEntity> SearchFor(System.Linq.Expressions.Expression<Func<TEntity, bool>> predicate)
    {
        return _entities.Set<TEntity>().Where(predicate);
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过这样的事情

public bool CheckIsExists<T>(string keyColumnName, string valueToCheck) where T : class
{
    bool isExist = false;

    using (var repository = ContextFactory.CreateEmployeeMasterRepository())
    {
        var repo = repository.GetEntityRepository<T>();
        object obj = (T)Activator.CreateInstance(type);
        repo.SearchFor(u => u.GetType().GetProperty(keyColumnName).GetValue(obj).ToString() == valueToCheck);
    }
    return isExist;
}
Run Code Online (Sandbox Code Playgroud)

哪个再次无效..

有人帮我这样做.我一直在努力...建议非常感谢.

Wah*_*tar -1

您可以从 dbcontext 执行 sql 查询:

using (var ctx = new DBEntities())
{
   var itemsCount = ctx.Database.SqlQuery<int>("select count(id) from "+TableName+" where "+keyColumnName+" = "+ValueToCheck+").FirstOrDefault<int>();
}
Run Code Online (Sandbox Code Playgroud)