EntityFramework中查询结果的返回

wsimei 2012-05-06 05:53:36
public IQueryable<Customers> Cust5()
{

using (var edm = new NorthwindEntities())
{

var cust= edm.Customers.OrderBy(c => c.CustomerID.Skip(0).Take(5));
return cust;
}
}
这个方法在一个程序集中,在另一个程序集中使用这个方法,但是返回的是接口(也就是指针),在调用程序集中:
var cust=dal.Cust5();
foreach(var c in cust)

Console.WriteLine("CustomerID={0}", c.CustomerID);
执行提示:
此 ObjectContext 实例已释放,不可再用于需要连接的操作。用什么办法返回这个查询结果数据呢?
...全文
350 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
moonwrite 2012-05-06
  • 打赏
  • 举报
回复
写错没有提示?
你没有用visual studio的吗?
var cust= edm.Customers.OrderBy(c => c.CustomerID).Skip(0).Take(5));
还是用visual studio
等到编译的时候才提示 太纠结了
随意我刚刚学编程的时候 有些书都是说不要用开发工具的
但以我现在的观点 还是用开发工具把
wsimei 2012-05-06
  • 打赏
  • 举报
回复
另一个问题:
public List<Customers> Cust5()
{

using (var edm = new NorthwindEntities())
{

var cust= edm.Customers.OrderBy(c => c.CustomerID.Skip(0).Take(5));
return cust.ToList();
}
}
这个在执行一到return cust.ToList()时提示:

DbExpressionBinding 要求输入表达式具有集合 ResultType。
参数名: input
wsimei 2012-05-06
  • 打赏
  • 举报
回复
自己刚刚找到答案:
1,第一个问题moonwrite回答的是对的,using里面的语句在执行完后就销毁了,所以在在返回时没有返回内容,解决方法代码如下:

public List<Customers> Cust10(int pageIndex)
{
//int pageIndex = 2; //要取的页号
int pageSize = 10; //每页行数
int skipCount = (pageIndex - 1) * pageSize; //跳过的行数
using (var edm = new NorthwindEntities())
{
ObjectQuery<Customers> customers = edm.Customers;
IQueryable<Customers> cst10=(from c in customers orderby c.CustomerID select c).Skip(skipCount).Take(pageSize);
return cst10.ToList();
}
}

将方法的类型定义为 List<Customers> 返回查询结果的ToList(),就可以了。
第二个问题是不包含skip定义的问题是实际是Skip,“K是大写。不小心造成的。
moonwrite 2012-05-06
  • 打赏
  • 举报
回复
linq有个延迟加载的概念
就是当要用的时候才去搜索
但你用了using 执行查询后 就没了 没有到要用时就释放了

public List<Customers> Cust5()
{

using (var edm = new NorthwindEntities())
{

var cust= edm.Customers.OrderBy(c => c.CustomerID.Skip(0).Take(5)).ToList();
return cust;
}
}
第二个问题 应该是没有加载程序集把
另外貌似skip和take是要先用orderby的
wsimei 2012-05-06
  • 打赏
  • 举报
回复
 public IQueryable<Customers> Cust10()
{
using (var edm = new NorthwindEntities())
{
ObjectQuery<Customers> customers = edm.Customers;
IQueryable<Customers> cst10=(from c in customers orderby c.CustomerID select c).skip(0).Take(10);
return cst10;
}
}

为什么提示:错误 1 “System.Linq.IOrderedQueryable<EFModel.Customers>”不包含“skip”的定义,并且找不到可接受类型为“System.Linq.IOrderedQueryable<EFModel.Customers>”的第一个参数的扩展方法“skip”(是否缺少 using 指令或程序集引用?) c:\users\administrator\documents\visual studio 2010\Projects\EFProject\EFModel\NorthWindDal.cs 47 97 EFModel

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧