2009-10-08 55 views
-1

實際的項目後,我公司目前有以下的ActionResult控制器讀取行,並使用LINQ

public ActionResult Details(string sku) 
    { 
     Product p = _productRepository.GetProduct(sku); 

     return View("Details", p); 
    } 

我想擴大在LINQ查詢之前返回的產品以及產品後風景。因此,我不會返回一種產品,而是返回三種產品。

  1. 產品之前(NULL,如果之前沒有產品)
  2. 產品,其SKU被稱爲
  3. 產品後(如果爲空後沒有產品)

任何幫助將是非常讚賞。

感謝

回答

0

更改視圖是一個字典類型,並返回一個字典,鍵上一個,當前,下一步。填寫存儲庫中的值。在查看從字典校驗值是零,也許有用於顯示SKU的控制(如果它顯示多於一個數據項)。

Dictionary<string, string> skuDictionary = new Dictionary<string, string>(); 
skuDictionary.Add("Previous", previousSKU); 
skuDictionary.Add("Current", currentSKU); 
skuDictionary.Add("Next", nextSKU); 

     return View(skuDictionary); 

編輯:使用LINQ獲取回購項目的代碼是在不同的答案。我是說你會做類似下面的東西,讓他們的觀點

,並認爲將有以下

Inherits="System.Web.Mvc.ViewPage<System.Collections.Generic.Dictionary<string, string>>" 

<% if (Model.ContainsKey("Previous")) { %><%=Model["Previous"] %><% } %> 
+0

你能展示一個代碼示例嗎?這將有所幫助。謝謝。 – Thomas

1

使用表我有方便(因爲你沒有提供的模式),採用5如在LINQPad一個實際變量的佔位符:

var pabove = (from p in PolicyStatuses 
where p.PolicyStatusID >= 5 
orderby p.PolicyStatusID ascending 
select p).Take(2); 

var pbelow = (from p in PolicyStatuses 
where p.PolicyStatusID <= 5 
orderby p.PolicyStatusID descending 
select p).Take(2); 

pabove.Union(pbelow).Dump(); 

這將抓住一個的上方和下方之一。然而,需要注意的是返回null當你沒有找到一個排的上方或下方不發生在這裏,它只是排除了這樣的結果。如果你真正關心,你可以採取pabove的數量和pbelow檢測,如果這樣的記錄被發現。

(從我的架構顯然再次)結果:

IOrderedQueryable<PolicyStatus> (3 items) 
PolicyStatusID Status RecordCreated 
4 
Unknown 
8/26/2007 11:06:11 PM 

5 
Expired 
8/26/2007 11:06:11 PM 

6 
Cancelled 
8/26/2007 11:06:11 PM 

需要注意的是4,5和6被發現。這比加載整個表格更有優勢,然後在您想要的結果附近選取結果。使用Take(2)只有3條記錄應該從SQL服務器到您的Web服務器。如果您的表格足夠小,只需使用排序查詢表格並過濾需要的內容即可。

這裏是LINQ產生的SQL(某些字段省略):

SELECT [t2].[PolicyStatusID], [t2].[Status], [t2].[RecordCreated] 
FROM (
    SELECT TOP (2) [t0].[PolicyStatusID], [t0].[Status], [t0].[RecordCreated] 
    FROM [PolicyStatus] AS [t0] 
    WHERE [t0].[PolicyStatusID] >= @p0 
    ORDER BY [t0].[PolicyStatusID] 
    UNION 
    SELECT TOP (2) [t1].[PolicyStatusID], [t1].[Status], [t1].[RecordCreated] 
    FROM [PolicyStatus] AS [t1] 
    WHERE [t1].[PolicyStatusID] <= @p1 
    ORDER BY [t1].[PolicyStatusID] DESC 
    ) AS [t2] 
0

您需要定義訂購你的產品,然後才能確定哪些產品之前或之後其他產品來。

一旦你定義順序,你可以做類似於@Godeke建議的東西。

的順序是完全由你決定,但應該讓某種感覺給用戶。通過ID列排序可能不是正確的方法。按名稱/顯示名稱排序,添加日期,最低價格等是有意義的。

更好的是,允許用戶定義訂單。