问题:使用Linq 查询时增加了一个条件【query.where(q=>q.Name == "张三");】就开始报这个错。
开始以为是EF与数据库字段属性映射有问题导致的,将该表在模型中删除再重新添加还是一样的错误。
原因:因为Linq查询时使用了未映射到Where表达式中的数据库列的属性及Name,就是说Name属性在执行Linq的过程中没有与数据库中的Name字段建立联系。
可以打断点看一下query中报错字段的值
public class PaperArchivesModel
{
public int PAID { get; set; }
public string PersID { get; set; }
public string IDCard { get; set; }
public string DeptID { get; set; }
public string Name{ get; set; }
}
//修改前,select中没有后面查询要用到的Name字段
var query = from paper in db.DA_PaperArchives
join p in db.DA_PersBasicInfo on paper.PersID equals p.PersID
join dept in db.DA_Department on p.DeptID equals dept.DeptID
select new PaperArchivesModel
{
PAID = paper.PAID,
PersID = paper.PersID,
IDCard = p.A0184,
DeptID = p.DeptID,
DeptName = dept.DeptName
};
query = query.where(q=>q.Name == "张三");//异常
解决:在select 时将where条件内容的字段加上,代码如图:
public class PaperArchivesModel
{
public int PAID { get; set; }
public string PersID { get; set; }
public string IDCard { get; set; }
public string DeptID { get; set; }
public string Name{ get; set; }
}
//修改后
var query = from paper in db.DA_PaperArchives
join p in db.DA_PersBasicInfo on paper.PersID equals p.PersID
join dept in db.DA_Department on p.DeptID equals dept.DeptID
select new PaperArchivesModel
{
PAID = paper.PAID,
PersID = paper.PersID,
IDCard = p.A0184,
DeptID = p.DeptID,
DeptName = dept.DeptName,
Name = p.Name //修改处,加上Name字段
};
query = query.where(q=>q.Name == "张三");//成功