我的功能与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;
}
从列表中删除Photo参数时,它工作正常。我添加照片时会出现以下错误。
LINQ to Entities无法识别方法&#39; System.Collections.Generic.List
1[Entities.ent_MessagePhoto] ToList[ent_MessagePhoto](System.Collections.Generic.IEnumerable
1 [Entities.ent_MessagePhoto])&#39;方法,并且此方法无法转换为商店表达式。
实体类如下
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; }
}
我对照片中的错误感到困惑...
提前致谢
答案 0 :(得分:2)
这一位:
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()
- 这将被解释为“将Where和OrderBy部件发送到SQL,将完整的结果集放回到列表,然后执行选择投影“。
答案 1 :(得分:0)
ent_MessagePhoto必须在类定义
中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; }
}
答案 2 :(得分:0)
感谢您的建议我解决了这个问题。问题仅限版本。我使用5.x并更新到6.x并且工作正常。