EF使用中的困惑,请大神指教

问题描述

一段程序如下,这是第一个疑惑,objectqueryIQueryable到底有什么区别TeachEasEntitiesdb=newTeachEasEntities(Public.Dbase.DataBaseEFConn);publicoverrideIList<View_All>ExamRoom_GetViewListByCourOrder(stringyearTermID,stringcourID,stringcourOrder){byteflag=(byte)ExamBatchInfo.Enum_BatchFlag.Released;shortshortCourOrder=short.Parse(courOrder);varquery=fromrindb.exam_Batchfromyindb.exam_Roomwherer.YearTermID==y.YearTermID&&r.CourID==y.CourID&&r.BatchOrder==y.BatchOrder&&r.BatchFlag==flag&&y.YearTermID==yearTermID&&y.CourID==courID&&y.CourOrder==shortCourOrderselectnewView_All{ExamBatch_WeekSection=r.WeekSection,ExamBatch_ExamDate=r.ExamDate,ExamBatch_TimeExplain=r.TimeExplain,ExamRoom_RoomID=y.RoomID,ExamRoom_RoomNumber=y.RoomNumber??0,};returnquery.ToList();}

这段程序没有问题,可以执行,但如果这样写,将程序分隔到不同的类中,就无法通过编译publicclassDataBaseControl{TeachEasEntitiesdb=newTeachEasEntities(Public.Dbase.DataBaseEFConn);publicIQueryable<exam_Batch>ExamBatch_GetList(){db.Refresh(System.Data.Objects.RefreshMode.StoreWins,db.exam_Batch);returndb.exam_Batch;}publicIQueryable<exam_Room>ExamRoom_GetList(){returndb.exam_Room;}}publicoverrideIList<View_All>ExamRoom_GetViewListByCourOrder(stringyearTermID,stringcourID,stringcourOrder){byteflag=(byte)ExamBatchInfo.Enum_BatchFlag.Released;shortshortCourOrder=short.Parse(courOrder);varquery=fromrinExamBatch_GetList()fromyinExamRoom_GetList()wherer.YearTermID==y.YearTermID&&r.CourID==y.CourID&&r.BatchOrder==y.BatchOrder&&r.BatchFlag==flag&&y.YearTermID==yearTermID&&y.CourID==courID&&y.CourOrder==shortCourOrderselectnewView_All{ExamBatch_WeekSection=r.WeekSection,ExamBatch_ExamDate=r.ExamDate,ExamBatch_TimeExplain=r.TimeExplain,ExamRoom_RoomID=y.RoomID,ExamRoom_RoomNumber=y.RoomNumber??0,};returnquery.ToList();}

如果改成这样,上述函数中会提示出错,说什么类型不对,我就不是很明白,db.exam_Batch出来的类型是objectquery,ExamBatch_GetList()函数出来的是IQueryable,到底有多少区别?IQueryable使用上,一旦出现需要NEW的地方就会出错,必须将其AsEnumerable(),这个时候使用NEW的时候就是正常的。无法理解,测试多次也还是同样的问题,同样的,如果AsEnumerable(),又会出现多次访问数据库的问题,在SQL的监测中,有些语句要执行很多遍,就是因为IEnumerable()类型。说起来,只是将这个程序分成两层,就变成这样了,到底是为什么呢?

解决方案

解决方案二:
改写后,override用法就不对,它是覆盖父类中abstract或virtual方法的,你这里根本就没有父类而第一段代码里,估计是一个派生类中的代码
解决方案三:
引用1楼From_TaiWan的回复:

改写后,override用法就不对,它是覆盖父类中abstract或virtual方法的,你这里根本就没有父类而第一段代码里,估计是一个派生类中的代码

好吧,我不得不解释下!这里就是覆盖父类中的方法的,我只是把我程序中的一段粘了过来而已,请不要在意这些!
解决方案四:
我这里想表达的是IQueryable类型的查询和objectquery区别很大。直接db.exam_Batch出来的是objectquery,但加上Where子句后变成IQueryable类型,但如果将其分解成下一层的方法,则其结果不是直接产生SQL语句。

时间: 2024-10-27 08:57:38

EF使用中的困惑,请大神指教的相关文章

c++-为什么结果会不同?请大神指教

问题描述 为什么结果会不同?请大神指教 #include using namespace std; int main() { unsigned int x; unsigned int y = 100; unsigned int z = 50; x = y - z; cout << ""Difference is: "" << x << endl; x = z - y; cout << ""nNow

menu-菜鸟请大神指教,关于在fragment中加入vierpager的问题

问题描述 菜鸟请大神指教,关于在fragment中加入vierpager的问题 package com.yanis.yc_ui_fragment_menu; import java.util.ArrayList; import java.util.List; import com.health.Circle; import com.health.Information; import com.health.Market; import android.os.Bundle; import andr

编程c语言-求助!菜鸟一枚 请大神指教!

问题描述 求助!菜鸟一枚 请大神指教! 请问用c语言怎么计算校验和?能将带有汉字的文件读入然后计算?过程怎么写!好着急啊! 解决方案 文件不管有没有汉字,都当作二进制数据.校验和还分为不同位数的. 具体要看对方协议的要求 仅供参考:http://download.csdn.net/detail/captain_black/679608 解决方案二: 1.中文字符串可以使用printf().puts()等函数直接输出.#include #include int main(){ const char

c++-用C++做个B2c电子商务 ,没有思路,请大神指教!

问题描述 用C++做个B2c电子商务 ,没有思路,请大神指教! 用户注册,用户登录.(编号,账号,密码,姓名,资金,地址) 登录后菜单项:选购商品,查看订单,查看资金,充值,修改账户信息,注销,退出 商家登录,此处商家和系统平台是统一角色,平台自营类似苏宁易购. 登录后菜单项:查看.添加.修改.删除商品(编号,商品名称,商品信息,价格,库存量,规格,颜色,所属商家), 查看订单,查看金额,注销,退出,相应的子菜单里应有返回上一级菜单功能. 选购商品,用户登录后可以直接商品进行购买下单. 记录订单

协议-Android软件使用TCP进行通信,连接不到服务端,在同一子网,代码跟异常日志都有,请大神指教

问题描述 Android软件使用TCP进行通信,连接不到服务端,在同一子网,代码跟异常日志都有,请大神指教 客户端线程:class BB1 extends Thread{ public void run() { try { System.out.println(""hahahha""); Socket client=new Socket(ipadressPORT); System.out.println(client.getPort()); mingling=&qu

eclispe android-eclipse第一次创建android工程出错,请大神指教

问题描述 eclipse第一次创建android工程出错,请大神指教 解决方案 工程make编译一下看看,有些出现红色的X是因为没有编译. 解决方案二: 看下环境配置是否正确.新建项目就出错一般是环境的问题 解决方案三: 不知道你的adt是不是自己装的,我之前也遇过,后来用google已集成的adt就没事了,要我可以发给你

vs2012-我的C程序VS2013报错,都不知道错哪了,请大神指教

问题描述 我的C程序VS2013报错,都不知道错哪了,请大神指教 hash函数名和数组next都定义了,都不知道哪错了 解决方案 感觉是标准库的某些内容重复了. std::next是里的template, std::hash是里的template. 都是c++ 11定义的. 解决方案二: 自己重新定义一下名字,这几个名字已经在类库中存在了 解决方案三: 你的定义重复了,如果你的代码没有重复定义它们,可能是和你包含的库文件冲突了,那么换个名字看看 解决方案四: hash和next重复定义了. 你可

dw-PB中怎么判断数据窗口导入excel的数据中有申请号是重复的,我这么写表达式老是错误,请大神指教

问题描述 PB中怎么判断数据窗口导入excel的数据中有申请号是重复的,我这么写表达式老是错误,请大神指教 for i=2 to ll_rows li_count =dw_list .insertrow(0) dw_list.setrow(li_count) //申请号5 dw_list.object.申请号[li_count] = ExcelServer.ActiveSheet.Cells[i,5].text next ll_found = dw_list.Find("dw_list.obje

解锁按钮-Java web 如何按钮的解锁问题,根据需求该如何做,请大神指教

问题描述 Java web 如何按钮的解锁问题,根据需求该如何做,请大神指教 1.点击"保存按钮"后保存录入学生成绩,教师可对保存的成绩进行修改, 2.点击"提交按钮"后学生成绩锁定不能再保存修改,只能查看.(即"保存按钮"和"提交按钮"变灰色) 3.解锁功能仅开放给管理员,管理员对成绩解锁后,教师可再次保存或者提交数据. 请问这个过程如何做,高人给点指点吧!!!!!! 解决方案 数据库中每个学生的信息中添加一个status字

for-在对语音信号进行MFCC提取时,进行语音分桢的情况。请大神指教。

问题描述 在对语音信号进行MFCC提取时,进行语音分桢的情况.请大神指教. int MFCC::Enframe(RealVec& signal, int winsize, int hopsize, RealMat& frames) { int frmnum = (int)((signal.GetLength()-winsize)/hopsize) + 1; frames.Resize(frmnum, winsize); frames.Zeros(); for(int i =0; i<