首页 > 解决方案 > 如何将过滤器发送到 linq 表达式?

问题描述

我在 Dataaccsess 层上有一个类似的方法。有没有办法将两个过滤器发送到 linq 表达式,比如用双星号突出显示的代码?

 public TEntity get(Expression<Func<TEntity, bool>> filter)
    {
        using (TContext context=new TContext())
        {
            return context.Set<TEntity>().SingleOrDefault(filter);
        }
    }


public void control(string username,string username)
{
   UserDal.get(**u=>u.username==username&&u=>u.password==password**);
    //enter code`enter code here` here
}

标签: c#linqexpression

解决方案


你得到的方法需要一个Expression<Func<TEntity, bool>>参数,我假设User实体继承自TEntity

如果这些属性:user.UserName并且user.Password不在基类TEntity中,则无法使用您的方法签名来完成 - 在表达式中,您只能从TEntity

为了传递User类特定属性的过滤器表达式,您必须创建一个带有Expression<Func<User, bool>>参数的单独方法,然后像这样调用它:

UserDal.getUser(u => u.UserName == "username" && u.Password == "password");

推荐阅读