【问题标题】:how to access new manuplated combined columns in MVC asp.net using linq如何使用 linq 在 MVC asp.net 中访问新的操作组合列
【发布时间】:2009-04-06 06:43:27
【问题描述】:

我在视图中显示列字段值时遇到问题。

我正在返回如下视图。

var TicketList = (from T in db.Tickets
                  where  T.Title.Contains("a")
                  select new {
                        customerName = (
                             from cname in db.Customers
                             where cname.CustomerId == T.CustomersId
                             select cname.FirstName + cname.LastName
                        ) ,
                        Title = T.Title
                  }).ToList();

 return View("SearchTicketsResult",TicketList);

在查看页面我有

<%foreach (TicketList ti in (IEnumerable)ViewData.Model) {%>
    <%=ti.Title%><br />
    <%=ti.customerName %>
<% } %>

我无法在页面中列出客户名称或标题。它说“找不到类型或命名空间名称'TicketList'(您是否缺少 using 指令或程序集引用?)”

有人可以指导我吗?

提前致谢。

【问题讨论】:

    标签: c# asp.net-mvc linq


    【解决方案1】:

    “TicketList”是匿名类型列表的变量名称。没有“TicketList”类型。可以从匿名类型进行强制转换(“通过示例”),但是非常脆弱,我根本不建议您为此使用匿名类型。

    一种选择是声明我自己的类型(在 UI 的“模型”文件夹中) - 例如 TicketSummary / TicketLite (等等),带有 TitleCustomerName。然后使用 this 类型:

    public class TicketSummary
    {
    
         public string CustomerName { get; set; }
         public string Title { get; set; }
    }
    
    var ticketList = (from t in db.Tickets
                      where  t.Title.Contains("a")
                      select new TicketSummary
                      {
                          CustomerName = (
                              from cname in db.Customers
                              where cname.CustomerId == t.CustomersId
                              select cname.FirstName.ToString()
                          ).FirstOrDefault(),
                          Title = t.Title
                      }).ToList();
    return ticketList;
    

    那么你应该可以使用:

    <%foreach (TicketSummary ts in (IEnumerable<TicketSummary>)ViewData.Model) {%>
        <%=ts.Title%><br />
        <%=ts.customerName %>
    <% } %>
    

    实际上,我可能会将这项工作卸载到存储库中,并拥有一个返回摘要类型列表的存储库方法。

    【讨论】:

    • 我在 Models 文件夹中创建了 TicketSummary.cs,具有以下属性。公共类 TicketSummary { public int TicketId { 获取;放; } 公共 int CustomerId { 获取;放; } 公共字符串 CustomerName { 获取;放; } ........ } 我觉得我做得不对?
    • 您是否也更改了查询“new TicketSummary {...}”和视图(“foreach (TicketSummary ...”)
    • 感谢您的评论,但我仍然无法得到它。我创建了 ITTicketsRepositiory 接口 IEnumerable ListTickets();然后 TicketSummary 作为存储库文件,带有 TicketSummary : ITTicketsRepositiory 并且在那个文件中我有
    • public IEnumerable ListTickets() { var TicketList =(从 db.Tickets 中的 T 选择 new { customerName =(从 db.Customers 中的 cname,其中 cname.CustomerId == T.CustomersId 选择 cname.FirstName。 ToString()), Title = T.Title }).ToList();返回票务列表;
    • ERROR:TicketSummary' 不包含“Title”的定义,并且找不到接受“CRM.Models.TicketSummary”类型的第一个参数的扩展方法“Title”(您是否缺少使用指令或程序集
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    相关资源
    最近更新 更多