LINQ到实体不能识别方法.,并且此方法不能转换为存储表达式
本文关键字:不能 转换 此方法 存储 表达式 实体 识别 方法 LINQ | 更新日期: 2023-09-27 18:15:51
我的函数是在lambda表达式
public IList<ent_Message> messageDetailsArray(decimal from,decimal to)
{
owncibai_ExamEntities db = new owncibai_ExamEntities();
var details = db.Messages.OrderBy(or=>or.mDate).Where(wh => (wh.userNumber==from && wh.messageTo==to) || (wh.messageTo==from && wh.userNumber==to)).Select(a => new ent_Message
{
isRead = a.isRead,
mDate = a.mDate,
Message1 = a.Message1,
messID = a.messID,
userNumber = a.userNumber,
messageTo=a.messageTo,
Name=a.User.First_Name+" "+a.User.Last_Name,
photo = (db.MessagePhotoes.Where(ph => ph.messID == a.messID).Select(b => new ent_MessagePhoto
{
msgPhoto=b.msgPhoto,
srl=b.srl
})).ToList()
}).ToList();
var update = db.Messages.Where(wh => wh.messageTo == from).ToList();
update.ForEach(a => a.isRead = true);
db.SaveChanges();
return details;
}
当我从列表中删除照片参数时,它工作正常。当我添加照片时,它会给出以下错误。
LINQ to Entities不能识别方法'System.Collections.Generic.List
1[Entities.ent_MessagePhoto] ToList[ent_MessagePhoto](System.Collections.Generic.IEnumerable
1[Entities. ent_messagepphoto])',并且该方法不能转换为存储表达式。
实体类如下
public class ent_Message{
public decimal messID { get; set; }
public Nullable<decimal> userNumber { get; set; }
public Nullable<decimal> messageTo { get; set; }
public Nullable<System.DateTime> mDate { get; set; }
public string ip { get; set; }
public string Message1 { get; set; }
public Nullable<bool> isRead { get; set; }
public Nullable<decimal> parentID { get; set; }
public string Name { get; set; }
public IList<ent_MessagePhoto> photo { get; set; }
}
我完全不知道我在照片中哪里错了…
Thanks in advance
这一点:
photo = (db.MessagePhotoes.Where(ph => ph.messID == a.messID).Select(b => new ent_MessagePhoto
{
msgPhoto=b.msgPhoto,
srl=b.srl
})).ToList() //<-right here
出现在外部Select
子句中。当IQueryProvider试图将外部Select
语句转换为有效的SQL时,它将看到内部Select
,当然可以转换为SQL,但随后它将击中ToList()
调用并失败,因为在SQL中没有等效的。
如果你想在你的Select
投影中执行一些不能在SQL中完成的操作,它们需要在。net应用程序端内存中的查询结果集上完成。一种常见的方法是将ToList()
放在select语句之前——这将被解释为"将Where和OrderBy部分发送给SQL,将完整的结果集带回List, 然后执行select投影"。
ent_messagepphoto必须在类定义
public class ent_Message<ent_MessagePhoto>
{
public decimal messID { get; set; }
public Nullable<decimal> userNumber { get; set; }
public Nullable<decimal> messageTo { get; set; }
public Nullable<System.DateTime> mDate { get; set; }
public string ip { get; set; }
public string Message1 { get; set; }
public Nullable<bool> isRead { get; set; }
public Nullable<decimal> parentID { get; set; }
public string Name { get; set; }
public IList<ent_MessagePhoto> photo { get; set; }
}
谢谢你的建议,我已经解决了这个问题。问题只是版本问题。我用的是5。X更新为6。