先上一段代码:public static List<NewCrswClass> GetCrswListByQuery(string[] ids) {
IQueryable<Open_Rs_CrsNew_Rel_Crsw> rel = db.Open_Rs_CrsNew_Rel_Crsw.Where(
c => ids.Contains(c.NewCrsId.ToString())
);
var relList = rel.ToList();
List<NewCrswClass> list = new List<NewCrswClass>();
foreach (Open_Rs_CrsNew_Rel_Crsw r in relList) {
var crswObj = (from crsw in db.Open_Rs_Courseware.Where(c => c.ID == r.CsrwId)
select crsw).Single(); NewCrswClass obj = new NewCrswClass() {
Id = crswObj.ID,
CrswName = crswObj.CrswName,
Url = crswObj.CrswUrl,
NewCrsName = r.Open_Rs_CourseNew.NewName
};
list.Add(obj);
}
return list;
}
比较怪异的是,这段代码运行时好时坏。
如果出问题,就是在中间的foreach部分,提示:指定的转换无效
问题似乎出在这里:读取引用属性public Open_Rs_CrsNew_Rel_Crsw()
{
this._Open_Rs_CourseNew = default(EntityRef<Open_Rs_CourseNew>);
//上面这句代码出错
this._Open_Rs_Courseware = default(EntityRef<Open_Rs_Courseware>);
OnCreated();
}
Open_Rs_CourseNew与Open_Rs_Courseware是多对多关系,Open_Rs_CrsNew_Rel_Crsw是中间关联表
IQueryable<Open_Rs_CrsNew_Rel_Crsw> rel = db.Open_Rs_CrsNew_Rel_Crsw.Where(
c => ids.Contains(c.NewCrsId.ToString())
);
var relList = rel.ToList();
List<NewCrswClass> list = new List<NewCrswClass>();
foreach (Open_Rs_CrsNew_Rel_Crsw r in relList) {
var crswObj = (from crsw in db.Open_Rs_Courseware.Where(c => c.ID == r.CsrwId)
select crsw).Single(); NewCrswClass obj = new NewCrswClass() {
Id = crswObj.ID,
CrswName = crswObj.CrswName,
Url = crswObj.CrswUrl,
NewCrsName = r.Open_Rs_CourseNew.NewName
};
list.Add(obj);
}
return list;
}
比较怪异的是,这段代码运行时好时坏。
如果出问题,就是在中间的foreach部分,提示:指定的转换无效
问题似乎出在这里:读取引用属性public Open_Rs_CrsNew_Rel_Crsw()
{
this._Open_Rs_CourseNew = default(EntityRef<Open_Rs_CourseNew>);
//上面这句代码出错
this._Open_Rs_Courseware = default(EntityRef<Open_Rs_Courseware>);
OnCreated();
}
Open_Rs_CourseNew与Open_Rs_Courseware是多对多关系,Open_Rs_CrsNew_Rel_Crsw是中间关联表
select crsw).Single();
这句话有问题!
如果crswObj为空,crswObj.ID,crswObj.CrswName...能用吗?????
c => ids.Contains(c.NewCrsId.ToString())
);
var relList = rel.ToList();
List<NewCrswClass> list = new List<NewCrswClass>();
foreach (Open_Rs_CrsNew_Rel_Crsw r in relList) {
这段代码也罗索:
改下:
IQueryable<Open_Rs_CrsNew_Rel_Crsw> rel = db.Open_Rs_CrsNew_Rel_Crsw.Where(
c => ids.Contains(c.NewCrsId.ToString())
);
List<NewCrswClass> list = new List<NewCrswClass>();
foreach (Open_Rs_CrsNew_Rel_Crsw r in rel ) {
public Open_Rs_CrsNew_Rel_Crsw()
{
this._Open_Rs_CourseNew = default(EntityRef<Open_Rs_CourseNew>);
this._Open_Rs_Courseware = default(EntityRef<Open_Rs_Courseware>);
OnCreated();
}中的EntityRef<Open_Rs_CourseNew>是什么意思呢?肯定返回的不是_Open_Rs_CourseNew类型的值吧,你考虑一下强制转换。看一看出错不?
非常感谢你的回复!这个应该不会有问题,Open_Rs_Courseware是基础数据表,之前的逻辑保证了这句代码取值不会为空。
为 LINQ to SQL 应用程序中的一对多关系的单一实例方提供延迟加载和关系维护。
你这个是多对多吧。可能被延迟加载了吧