Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以在没有DbContext实例的情况下生成查询?_C#_.net_Entity Framework_Dbcontext - Fatal编程技术网

C# 是否可以在没有DbContext实例的情况下生成查询?

C# 是否可以在没有DbContext实例的情况下生成查询?,c#,.net,entity-framework,dbcontext,C#,.net,Entity Framework,Dbcontext,我使用的是实体框架5。我想构建一个查询(DbQuery?),然后在DbContext上执行它。可能吗 通常,我会执行如下查询: using (var db = new MyDbContext()) { var nike = db.Products.Where(p => p.Brand == "Nike").OrderBy(p => p.Name); foreach (var product in nike) { Debug.WriteLine(

我使用的是实体框架5。我想构建一个查询(DbQuery?),然后在DbContext上执行它。可能吗

通常,我会执行如下查询:

using (var db = new MyDbContext())
{
    var nike = db.Products.Where(p => p.Brand == "Nike").OrderBy(p => p.Name);
    foreach (var product in nike)
    {
        Debug.WriteLine(product.Name);
    }
}
但是,我是否可以在创建DbContext之前构造查询,然后在实际需要检索数据时将查询附加到DbContext实例?

public IEnumerable GetProduct(MyDbContext db){
public IEnumerable<Products> GetProduct(MyDbContext db){
   //query created before-hand
   var nike = db.Products.Where(p => p.Brand == "Nike").OrderBy(p => p.Name);
   return nike;
}

//and then in your method:
using (var db = new MyDbContext()){
   var nike = GetProduct(db); //MyDbContext object attached here.
   foreach(var product in nike){
     Debug.WriteLine(product.Name);
   }
}
//手工创建的查询 var nike=db.Products.Where(p=>p.Brand==“nike”).OrderBy(p=>p.Name); 返回nike; } //然后在你的方法中: 使用(var db=new MyDbContext()){ var nike=GetProduct(db);//此处附加MyDbContext对象。 foreach(nike的var产品){ Debug.WriteLine(产品名称); } }

也许这就是你想做的?我不确定。

解决方案如下:

public Func<bool,Products> Filter()
{
    return i => i.Brand == "Nike"
}
public Func<bool,Products> Filter(string brandName)
{
    return i => i.Brand == brandName;
}


//usage:
db.Products.Where(Filter());
//or
db.Products.Where(Filter("Nike"));
public Func Filter()
{
返回i=>i.品牌==“Nike”
}
公共Func筛选器(字符串brandName)
{
返回i=>i.Brand==brandName;
}
//用法:
db.Products.Where(Filter());
//或
db.Products.Where(过滤器(“Nike”));
目前我无法测试,但可能您必须使用
表达式


有人可以确认吗?

也可以使用此解决方案: