【发布时间】:2013-10-25 13:41:04
【问题描述】:
Linq 查询在尝试传递从列表对象中获取的列值时返回 null。是否可以按照代码中的方式进行操作。期待答案或建议。
var query = from p in context.ProcessStepTables
where (p.DiagramID == diagramInfo.DiagramID)
orderby p.ProcessNo select new{
DiagramProcessID = p.DiagramProcessID,
ProcessNo = p.ProcessNo,
ProcessID = p.ProcessID,
ProcessName = Process().Find(x =>
p.ProcessID == x.ProcessID).ProcessName.ToString(),
MakerName = Maker().Find(x=>
p.MakerID==x.MakerID).MakerName.ToString(),
Price = p.Price,
Note = p.Note,
Notice = p.Notice
};
private List<MakerTable> Maker()
{
List<MakerTable> pList = new List<MakerTable>();
try
{
IQueryable<MakerTable> maker = (from data in context.MakerTables
select data) as IQueryable<MakerTable>;
foreach (MakerTable val in maker)
{
pList.Add(val);
}
return pList.OrderBy(x => x.MakerName).ToList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return null;
}
}
【问题讨论】:
-
代码在哪里返回null?
-
消息是什么?我可以看到由于某些异常,返回值可能是
null。最好删除或注释掉所有的try-catch块来调试它。 -
Sorry Query is Exception "LINQ to Entities 无法识别方法 'System.String ToString()' 方法,并且此方法无法转换为存储表达式。" var 查询部分返回异常!
-
您的 Maker 方法的整个定义可以只用一行替换,即
return context.MakerTables.OrderBy(x=>x.MakerName).ToList(); -
你试过没有 2 个
.ToString()调用吗?