2016-07-27 58 views
0

我试图创建一个查询AdventureWorks2012数据库的SPA,并使用Jquery ui datepicker基于日期时间范围填充强类型表。从SQL中的多个表填充ViewModel

我遇到的问题是它返回所有相同的重复记录。

Duplicate Records

感谢您的帮助!

_layout查看代码:

<div> 
    <h2>Pick a date range:</h2> 
    <form action='@Url.Action("GetOrders","Home")' method="post"> 
    <label for="from">From</label> 
    <input type="text" id="from" name="startDate"> 
    <label for="to">To</label> 
    <input type="text" id="to" name="endDate"> 
    <input type='submit' value='Set Range' /> 
    </form> 
</div> 

$(function() { 
var dateFormat = "mm/dd/yy", 
    from = $("#from") 
    .datepicker({ 
     defaultDate: "+1w", 
     changeMonth: true, 
     numberOfMonths: 3 
    }) 
    .on("change", function() { 
     to.datepicker("option", "minDate", getDate(this)); 
    }), 
    to = $("#to").datepicker({ 
    defaultDate: "+1w", 
    changeMonth: true, 
    numberOfMonths: 3 
    }) 
    .on("change", function() { 
    from.datepicker("option", "maxDate", getDate(this)); 
    }); 

function getDate(element) { 
    var date; 
    try { 
    date = $.datepicker.parseDate(dateFormat, element.value); 
    } catch(error) { 
    date = null; 
    } 

    return date; 
}}); 

GetOrders.cshtml代码:

@model System.Collections.Generic.List<ApexAssignment.ViewModels.OrderViewModel> 
@foreach (var item in Model) 
{ 
    <tr> 
     <td class="tg-yw4l"> 
      @item.Store 
     </td> 
     <td class="tg-yw4l"> 
      @item.Customer 
     </td> 
     <td class="tg-yw4l"> 
      @item.AccountNumber 
     </td> 
     <td class="tg-yw4l"> 
      @item.InvoiceNumber 
     </td> 
     <td class="tg-yw4l"> 
      @item.CustomerPO 
     </td> 
     <td class="tg-yw4l"> 
      @item.OrderDate 
     </td> 
     <td class="tg-yw4l"> 
      @item.DueDate 
     </td> 
     <td class="tg-yw4l"> 
      @item.InvoiceTotal 
     </td> 
     <td class="tg-yw4l"> 
      @item.ProductNumber 
     </td> 
     <td class="tg-yw4l"> 
      @item.Quantity 
     </td> 
     <td class="tg-yw4l"> 
      @item.UnitNet 
     </td> 
</tr> 
} 

控制器方法代码:

[HttpPost] 
    public ActionResult GetOrders(DateTime startDate, DateTime endDate) 
    { 
     var model = (from p in db.People 
        from pd in db.Products 
        from so in db.SalesOrderDetails 
        from sh in db.SalesOrderHeaders 
        where sh.OrderDate > startDate && sh.OrderDate < endDate 
        from s in db.Stores 
        from c in db.Customers 
        select new OrderViewModel() 
        { 
         AccountNumber = sh.AccountNumber, 
         Customer = p.FirstName + " " + p.LastName, 
         Store = s.Name, 
         ProductNumber = pd.ProductNumber, 
         DueDate = sh.DueDate, 
         CustomerPO = sh.PurchaseOrderNumber, 
         Quantity = so.OrderQty, 
         InvoiceNumber = sh.SalesOrderNumber, 
         UnitNet = so.UnitPrice, 
         InvoiceTotal = sh.TotalDue, 
         OrderDate = sh.OrderDate 
        }); 

     return View(model.ToList()); 
    } 
+0

你需要添加连接到您的LINQ –

+0

我认为这是一种交叉连接尝试使用内部连接或通过使用连接语句左连接 –

回答

0
var model = db.SalesOrderDetails 
    .Where(e => e.SalesOrderHeader.OrderDate > startDate) 
    .Where(e => e.SalesOrderHeader.OrderDate < endDate) 
    .Join(db.Products, order => order.ProductID, 
     product => product.ProductID, (order, product) => new 
     { 
      Quantity = order.OrderQty, 
      UnitNet = order.UnitPrice, 
      DueDate = order.SalesOrderHeader.DueDate, 
      CustomerPO = order.SalesOrderHeader.PurchaseOrderNumber, 
      InvoiceNumber = order.SalesOrderHeader.SalesOrderNumber, 
      InvoiceTotal = order.SalesOrderHeader.TotalDue, 
      OrderDate = order.SalesOrderHeader.OrderDate, 
      AccountNumber = order.SalesOrderHeader.AccountNumber, 
      Store = order.SalesOrderHeader.Customer.Store.Name, 
      Customer = order.SalesOrderHeader.Customer.Person.FirstName + " " + 
         order.SalesOrderHeader.Customer.Person.LastName, 
      ProductNumber = product.ProductNumber 
     }).ToList(); 
+0

感谢您的回复。所以在新的关键字后,我会做OrderViewModel()? – Crumblenautjs

+0

它工作的穆罕默德,谢谢你的先生! – Crumblenautjs

+0

这是我的荣幸,祝你好运 –