JBTALKS.CC

标题: linq 能不能这样和 sesssion做compare ?? [打印本页]

作者: 我是大猪头    时间: 2009-11-14 01:29 PM
标题: linq 能不能这样和 sesssion做compare ??
var query1 = from u in context.User
                         where u.UserId == Session["UserId"]
                         select u;

vwd报错

我是可以转去string做compare..
只是想知道可不可以这样compare而已

[ 本帖最后由 我是大猪头 于 2009-11-14 01:30 PM 编辑 ]
作者: 我是大猪头    时间: 2009-11-14 01:37 PM
还有这个
Object reference not set to an instance of an object.

int mDepartment = query1.FirstOrDefault().Department.DepartmentId;

那个query1是我的object User
我要抓object User里面的 objDepartment 里面的 primary key..
直接这样做不可以的哦?em0010
作者: 我是大猪头    时间: 2009-11-15 01:35 PM
请goodday哥指出我的错误
怎么总觉得我写的这段code很傻
Linq 新手 pai seh
我要用session里面User的departmentId对比
objleave里面foreign key userid的 Foreign key department Id
linq好像不能直接跨越两个obj拿去资料
所以我只好分成一个一个obj拿资料,可是他就出现了这个error

Unable to create a constant value of type 'Closure type'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.NotSupportedException: Unable to create a constant value of type 'Closure type'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.

不懂是什么ERROR第一次看过


objLeaveBLL = new LeaveBLL(context);

            string sUser = Session["UserId"].ToString();
            string sRole = Session["UserRole"].ToString();

            var query1 = from u in context.User
                         where u.UserId == sUser
                         select u;
            var query2 = from D in context.Department
                         where D.DepartmentId == query1.FirstOrDefault().Department.DepartmentId
                         select D;

            int ManagerDepartmentId = query2.FirstOrDefault().DepartmentId;
            


            if (sRole == "Manager")
            {
                LeaveList = objLeaveBLL.GetLeaveByUserRole("Staff");
                grv_LeaveApprove.DataSource = LeaveList;
                grv_LeaveApprove.DataBind();

                var query3 = from L in LeaveList
                             where L.User.UserId == L.User.UserId
                             select L.User;

                var query4 = from D in context.Department
                             where D.DepartmentId == query3.FirstOrDefault().Department.DepartmentId
                             select D;                           
               
                if (ManagerDepartmentId == query4.FirstOrDefault().DepartmentId )
                {                    
                    LeaveList = objLeaveBLL.GetLeaveByLeaveApprove("ending");
                    grv_LeaveApprove.DataSource = LeaveList;
                    grv_LeaveApprove.DataBind();
                }
            }

请把我的错误点出来吧
感谢了

[ 本帖最后由 我是大猪头 于 2009-11-15 01:41 PM 编辑 ]
作者: 我是大猪头    时间: 2009-11-15 01:45 PM
怎么没人来指教一下。。。
作者: goodday    时间: 2009-11-15 08:21 PM
原帖由 我是大猪头 于 2009-11-14 01:29 PM 发表
var query1 = from u in context.User
                         where u.UserId == Session["UserId"]
                         select u;

vwd报错

我是可以转去string做compare..
只是想知道可不 ...


你还搞不清楚 boxing  /  unboxing

var query1 = from u in context.User
                         where u.UserId == Session["UserId"]
                         select u;

var query1 = from u in context.User
                         where u.UserId == Session["UserId"].ToString()
                         select u;

var query1 = from u in context.User
                         where u.UserId == (int)Session["UserId"]
                         select u;

2008 的 新type

int?
double?
bool?

都是nullable 的

自己要unboxing
因为 int?  != int

自己要转  (int)Session["UserID"]; <-- boxing/unboxing
or
Convert.ToInt32(Session["UserID"]); <-- objecting
or
int.Parse(Session["UserID"]);<--boxing/unboxing
or
DirectCast(Session["UserID"],int);<-- objecting

Linq 比较特别

u.UserId equal Session["UserId"] // equal ref system.linq

自己练习多了 就会分别
作者: goodday    时间: 2009-11-15 08:24 PM
Object reference not set to an instance of an object.

上面的是 少了

dbcontext db = new dbcontext;

你没 initialize 你要用的object

用new  阿






var query2 = from D in context.Department
                         where D.DepartmentId == query1.FirstOrDefault().Department.DepartmentId
                         select D;


这个够乱来的
能跑吗??


你的query1 的 declaration 呢??
作者: 我是大猪头    时间: 2009-11-15 09:34 PM
原帖由 goodday 于 2009-11-15 08:24 PM 发表
Object reference not set to an instance of an object.

上面的是 少了

dbcontext db = new dbcontext;

你没 initialize 你要用的object

用new  阿






var query2 = from D in context ...


paiseh我真的是写到有点傻了
作者: 我是大猪头    时间: 2009-11-15 10:52 PM
原帖由 goodday 于 2009-11-15 08:21 PM 发表


你还搞不清楚 boxing  /  unboxing

var query1 = from u in context.User
                         where u.UserId == Session["UserId"]
                         select u;

var query1 = from ...


haiz,看来我还需要多加努力啊
作者: goodday    时间: 2009-11-16 12:45 AM
我觉得你 因该由
ado.net 进手

因为 linq 和 entity 是 oop 的基础要很深

你的 oop 还有进步的空间

否则你现在很乱 咯

一点意见咯
你如果觉得很麻烦
那你就会想懒得方法在ado.net

慢慢的你就会 oop 的 咯哦

oop 也是 写一次 懒很多的 又好管理的

下来你会了 oop 就
会要学 “大话设计模式”  的 factory mode   咯


作者: 我是大猪头    时间: 2009-11-16 12:50 AM
原帖由 goodday 于 2009-11-16 12:45 AM 发表
我觉得你 因该由
ado.net 进手

因为 linq 和 entity 是 oop 的基础要很深

你的 oop 还有进步的空间

否则你现在很乱 咯

一点意见咯
你如果觉得很麻烦
那你就会想懒得方法在ado.net

慢慢的你就 ...



只能说我没基础
可以说是想要想从高处开始爬起,结果必须爬回起跑点再慢慢爬上去
其实一开始我也不懂linq是什么。。
只是我senior叫我学新的东西我就学咯
经常看到ado.net这个字眼我也不懂是什么来的
大话设计程式,没时间看啊haiz,做project做到没时间看
而且pdf 真的很难看
等这个project过了之后再慢慢理解大话设计程式的精髓吧

[ 本帖最后由 我是大猪头 于 2009-11-16 12:53 AM 编辑 ]
作者: 我是大猪头    时间: 2009-11-16 12:55 AM
原帖由 goodday 于 2009-11-16 12:45 AM 发表
我觉得你 因该由
ado.net 进手

因为 linq 和 entity 是 oop 的基础要很深

你的 oop 还有进步的空间

否则你现在很乱 咯

一点意见咯
你如果觉得很麻烦
那你就会想懒得方法在ado.net

慢慢的你就 ...


我的大话设计程式pdf版,是scan书的,所以看起来怪怪的。。
你有好的pdf版本吗?
等过了这个semester要充实一下自己




欢迎光临 JBTALKS.CC (https://jbtalks.my/) Powered by Discuz! X2.5