从MVC中的另一个表中提取字段

时间:2015-05-29 13:51:05

标签: c# asp.net-mvc linq visual-studio

我刚刚学习MVC,这是我的第一个项目。我正在创建的是我公司的服务台。现在我正在处理添加门票。

我试图让它发挥作用的方式是我们有一个用户选择的“Microsoft Office”等票类。每个类别都附有技术人员。因此,当用户选择类别时,应该自动分配技术人员。这是我目前的代码:

public ActionResult Create(NewTicket newTicket)
    {
        Ticket ticket = new Ticket();
        TicketNote ticketNote = new TicketNote();

        try
        {
            Guid ticketGuid = System.Guid.NewGuid();

            //Add Ticket
            ticket.TicketId = ticketGuid;
            //ticket.TicketNumber = 
            ticket.CategoryId = newTicket.CategoryId;
            ticket.OpenUserId = new Guid("999600FC-709E-4463-84AD-D26894BABB54");
            ticket.OpenDate = DateTime.Now;
            ticket.TechnicianId = from c in db.Categories
                                  where c.CategoryId == newTicket.CategoryId
                                  select c.PrimaryTechnicianId;
            ticket.TicketStatusId = new Guid("00000000-0000-0000-0000-000000000000");
            //ticket.CloseDate = DateTime.Now;
            tickets.Insert(ticket);
            tickets.Commit();

            //Add Ticket Note
            ticketNote.TicketNoteId = System.Guid.NewGuid();
            ticketNote.TicketId = ticketGuid;
            ticketNote.TicketNoteDate = DateTime.Now;
            ticketNote.Note = newTicket.TicketNote;
            ticketNotes.Insert(ticketNote);
            ticketNotes.Commit();

            return RedirectToAction("Index");
        }
        //catch(Exception ex)
        catch
        {
            return View();
        }
    }

我遇到的问题特别在于这一行(其余的工作):

ticket.TechnicianId = from c in db.Categories
                                  where c.CategoryId == newTicket.CategoryId
                                  select c.PrimaryTechnicianId;

我一直得到的错误是'错误1无法在上一行的select语句中隐式转换类型'System.Linq.IQueryable'为'System.Guid'

2 个答案:

答案 0 :(得分:1)

我相信,这个LINQ:

 from c in db.Categories where c.CategoryId == newTicket.CategoryId
                       select c.PrimaryTechnicianId;

将返回IEnumerable,因此,为了分配给ticket.TechnicianId,您应该继续致电FirstSingle,如下所示:

ticket.TechnicianId = (from c in db.Categories
                              where c.CategoryId == newTicket.CategoryId
                              select c.PrimaryTechnicianId).Single();

答案 1 :(得分:0)

您是否应该覆盖TechnicianId

ticket.TechnicianId = from c in db.Categories
                                  where c.CategoryId == newTicket.CategoryId
                                  select c.PrimaryTechnicianId;
ticket.TechnicianId = new Guid("00000000-0000-0000-0000-000000000000");

select只是说明哪些字段退出类别对象仍然会返回IQueryable<T>。要获得Guid,您需要事后致电.First().Single(),以便从IQueryable<T>中获取1个对象。

我建议拨打.Single(),因为如果您有一个超过1 CategoryId的类别列表,则会出现错误。

First()会从列表中返回一个项目。 Single()期望只有一个项目,如果不存在则会产生错误。

我建议您阅读我对此question

的回答