首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架4中的查询,方法查询问题

实体框架4中的查询,方法查询问题
EN

Stack Overflow用户
提问于 2011-05-06 01:45:52
回答 2查看 407关注 0票数 0

我有点误会,希望你能帮我澄清一下。我有一张桌子叫:请求。

我想做查询,让我们用请求Id来表示,但是它不起作用。

代码语言:javascript
复制
public Requests SearchById(int id)
{
    Model.ModelContainer cont = new Model.ModelContainer();
    return (cont.Requests.Where(req => req.ReqId == id));
    //when i try to cast to Request i get an error too
}

我找到了这一行应该起作用的一个例子:

代码语言:javascript
复制
cont.Requests.First(req => req.ReqId == id)

但是我在编译过程中遇到错误,它不能包含lambda表达式。

我没有什么问题:

  1. 如何处理上面的示例?(从实体查询)
  2. 如何处理多行结果?除了转换为构建和高级搜索所需的列表
  3. (我有6-7列)之外,还有一种常见的方法吗?

谢谢!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-06 02:19:32

这应该是可行的:

代码语言:javascript
复制
public Request SearchById(int id)
        {
           using(Model.ModelContainer cont = new Model.ModelContainer())
           {
                return cont.Requests.Where(req => req.ReqId == id).FirstOrDefault();
           }
        }

您所拥有的是一个IEnumerable<Request>,而不是一个请求。还要确保你有一个

代码语言:javascript
复制
using System.Linq;

在你的代码文件中。而且,当可以使用using块时,始终要释放上下文。

代码语言:javascript
复制
cont.Requests.First(req => req.ReqId == id)

这也应该有效--确保代码文件中有一个using System.Linq

除了转换为列表之外,如何处理多行结果?

由于您的上下文是本地的,并且在您的方法之外不可用(随后会对它进行处理),所以列表是您的最佳选择。如果将其保留为IQueryable,那么您还没有真正从DB检索结果,您刚刚定义了查询,这将导致消费者检索结果时出现的问题,因为只有这样才会执行DB查询--但是相应的DB上下文可能已经被释放了。在查询结束时追加.ToList(),以实现IQuerable<T>

我需要构建和高级搜索(我有6-7列),有一个共同的方法吗?

可以在.Where()扩展方法中组合多个子句,即Where( x=> x.A=="foo" && x.B == 42)。如果需要,还可以链接多个Where()方法。

票数 1
EN

Stack Overflow用户

发布于 2011-05-06 02:40:01

您的问题是Where返回对象集合(零到多)。你只想要一个物体。不能简单地将对象集合转换为单个对象。

相反,您应该得到First (或者如果您知道肯定只有一个您可以调用Single)。

关于2-这取决于你想做什么。您可以对结果集执行foreach,或者在将结果集放入列表之前从结果集中进行选择--但有时最有效的选项是先输入一个列表。

第三点,有很多可用的模式。同样,这取决于你在做什么,以及“搜索词”是如何工作的。例如,

代码语言:javascript
复制
public List<Requests> SearchById(int? id, DateTime? date, string name)
{
    var cont = new Model.ModelContainer();
    var query = cont.Requests;

    if (id != null)
        query = query.Where(req => req.ReqId == id.Value);

    if (date != null)
        query = query.Where(req => req.Date == date.Value);

    if (!String.IsNullOrEmpty(name))
        query = query.Where(req => req.Name == name);

    return query.ToList();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5906013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档