【问题标题】:Dynamic LINQ queries for a web APIWeb API 的动态 LINQ 查询
【发布时间】:2016-03-27 22:04:43
【问题描述】:
public JsonResult GetThis(string typ1)
{     
    ThisContext tpc = new ThisContext();
    IQueryable<ThisDB> oDataQuery = tpc.ThisDBs;
    if (typ1 != null)
    {
        oDataQuery = oDataQuery.Where(a => a.Type == typ1);
        var result = oDataQuery.ToList();
        return Json(result, JsonRequestBehavior.AllowGet);
    }
    else return null;
}

这里的想法是创建一个基本的 get 方法,它选择具有“好”类型的每一行,它不亚于一个 Web API 方法。

问题是我不明白为什么我的代码不工作,它实际上什么也没返回(数据库不是空的,如果我在没有参数的情况下查询它,它工作顺利)。

这一定是个愚蠢的错误,但我看不到。我知道有多种方法可以进行动态 linq 查询,但我想首先了解为什么这不起作用。

感谢您的宝贵时间!

【问题讨论】:

  • ThisDB 和 ThisContext 是什么?
  • 我使用的是Entity Framework 6,所以ThisContext是我的dbcontext,ThisDB是一个模型,ThisDBs是ThisDB的ICollection。
  • 你说如果你“不带参数查询它工作顺利”。你是说如果你跳过oDataQuery = oDataQuery.Where(a =&gt; a.Type == type1); 行,你会得到表中所有记录的列表?
  • 我建议您尽可能通过 LinqPad 尝试 OData WebApi 并观察查询字符串。 OData 的接口非常脆弱。

标签: c# linq dynamic asp.net-web-api entity-framework-6


【解决方案1】:

首先,您应该为数据库上下文定义一个范围,因为它是一次性的。(虽然它不会影响结果集,但这是一个好习惯)

 using(ThisContext tpc = new ThisContext())
 {
      //Your code goes here.
 }

接下来,你应该使用

string.IsNullOrEmpty() 
//or 
string.IsNullOrWhiteSpaces()

可用于检查字符串是否为空或者它可能包含内容为空格或空字符串的方法。

public JsonResult GetThis(string typ1)
{     
    using(ThisContext tpc = new ThisContext())
    {
        IQueryable<ThisDB> oDataQuery = tpc.ThisDBs;
        if (!string.IsNullOrWhiteSpace(typ1))
        {
            oDataQuery = oDataQuery.Where(a => a.Type == typ1);
            var result = oDataQuery.ToList();
            return Json(result, JsonRequestBehavior.AllowGet);
        }
        else return null;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-16
    • 2011-06-13
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2021-11-16
    相关资源
    最近更新 更多