Linq to sql中的异常

moh*_*eza 0 exception linq-to-sql

我的查询是:

var ReadAndUnreadMessages =
        (from m in MDB.Messages
         orderby m.Date descending
         where m.ID_Receive == (Guid)USER.ProviderUserKey && m.Delete_Admin == false
         select new AllMessages()
         {
             id = (LoadMessageChildren(m.ID_Message)[LoadMessageChildren(m.ID_Message).Count - 1] as Message).ID_Message,
             parent = (Guid)(LoadMessageChildren(m.ID_Message)[LoadMessageChildren(m.ID_Message).Count - 1] as Message).ID_Message_Parent,
             sender = (LoadMessageChildren(m.ID_Message)[LoadMessageChildren(m.ID_Message).Count - 1] as Message).ID_Sender,
             receiver = (Guid)USER.ProviderUserKey,
             subject = (LoadMessageChildren(m.ID_Message)[LoadMessageChildren(m.ID_Message).Count - 1] as Message).Subject.Subject1.ToString() == "Other" ?
                           (LoadMessageChildren(m.ID_Message)[LoadMessageChildren(m.ID_Message).Count - 1] as Message).Other_Subject
                           :
                           (LoadMessageChildren(m.ID_Message)[LoadMessageChildren(m.ID_Message).Count - 1] as Message).Subject.Subject1.ToString(),
             body = (LoadMessageChildren(m.ID_Message)[LoadMessageChildren(m.ID_Message).Count - 1] as Message).Body.Length > 26 ?
                     (LoadMessageChildren(m.ID_Message)[LoadMessageChildren(m.ID_Message).Count - 1] as Message).Body.Substring(0, 25) + "..."
                     :
                     (LoadMessageChildren(m.ID_Message)[LoadMessageChildren(m.ID_Message).Count - 1] as Message).Body,
             date = (LoadMessageChildren(m.ID_Message)[LoadMessageChildren(m.ID_Message).Count - 1] as Message).Date.ToShortDateString(),
             read =(LoadMessageChildren(m.ID_Message)[LoadMessageChildren(m.ID_Message).Count - 1] as Message).IsRead,
             finished = (LoadMessageChildren(m.ID_Message)[LoadMessageChildren(m.ID_Message).Count - 1] as Message).IsFinished,
             count = MessageClass.LoadAll(m.ID_Message).Count
         }).ToList();
Run Code Online (Sandbox Code Playgroud)

例外是:

参数'value'是错误的类型.预期的'消息'.实际的'System.Object'.

什么意思呢?

LoadMessageChildren:

public static ArrayList LoadMessageChildren(Guid Parent)
{
    ArrayList arr = new ArrayList();
    Guid id = Parent;
    while (id != Guid.Empty)
    {
        arr.Add(LoadMessage(id));
        try
        {
            id = (Guid)MDB.Messages.Single(a => a.ID_Message_Parent == id).ID_Message;
        }
        catch
        {
            id = Guid.Empty;
        }
    }
    return arr;
}
Run Code Online (Sandbox Code Playgroud)

LoadMessage:

public static Message LoadMessage(Guid id)
{
    var mess = from m in MDB.Messages
               where m.ID_Message == id
               select m;

    return mess.Single();
}
Run Code Online (Sandbox Code Playgroud)

Kob*_*obi 5

代码是不可读的,并且是代码重复(以及多次执行LoadMessageChildren)的坏情况.
对于初学者,请考虑以下事项:

from m in MDB.Messages
     orderby m.Date descending
     where m.ID_Receive == (Guid)USER.ProviderUserKey && m.Delete_Admin == false
     let children = LoadMessageChildren(m.ID_Message)
     let lastChildMessage = children.Last()
     select new AllMessages()
     {
         id = lastChildMessage.ID_Message, 
         ...
     }
Run Code Online (Sandbox Code Playgroud)

这可能会解决您的问题,因为它可能是由使用[]索引器引起的.
除此之外,尚不清楚发布的代码是否导致异常.