2016-07-27 88 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

這是我的榮幸,祝你好運 –