2017-07-19 97 views
0

我有一個WCF服務中的LINQ查詢運行並返回正在查找的結果的正確數量,但重複第一次結果25次而不是顯示我所有25個不同的結果記錄。WCF中的LINQ返回重複結果

奇怪的是,當我從調試器中生成SQL查詢並將其插入到SQL Management Studio中時,我得到了正確的結果。

我試着刷新了我從edmx查詢的視圖,並試圖用幾種不同的方式重寫查詢,但我開始用盡想法。 我已經包含了下面的一些代碼。任何的意見都將會有幫助。謝謝!

try 
     { 
      using (Entities db = new Entities()) 
      { 
       var qInventory = db.vw_Web_Store_Inventory_Live 
            .Where(qi => qi.Sku_Number == inputSKU) 
            .ToList(); 

       resultPInventory.SKU = inputSKU; 
       resultPInventory.StoreInventory = new List<StoreItem>(); 

       foreach (var qi in qInventory) 
       { 
        resultPInventory.StoreInventory.Add(new StoreItem 
        { 
         StoreNum = qi.Store_Number, 
         Quantity = qi.Curr_Inv 
        }); 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      log.Error("[" + e.TargetSite + "] | " + e.Message); 
     } 

     log.Info("ProductInventory(" + inputSKU + ") returned " + resultPInventory.StoreInventory.Count + " results"); 

     return resultPInventory; 
+1

請檢查:https://stackoverflow.com/a/14816397/861716 –

回答

0

正如Gert在評論中指出的那樣,有時LINQ可能會這樣做,如果主鍵設置不當,或者數據庫中有多行沒有唯一值。

This link也顯示了類似的問題。

的解決方案,不是重寫你的數據庫列(雖然這將是從長遠來看更好)具有更好的主/唯一鍵等,是匿名選擇特定值(以後你可以輕鬆地將它們分配):

var qInventory = db.vw_Web_Store_Inventory_Live 
        .Where(qi => qi.Sku_Number == inputSKU) 
        .Select(qi => new { qi.Store_Number, qi.Curr_Inv }) 
        .ToList(); 

resultPInventory.SKU = inputSKU; 
resultPInventory.StoreInventory = new List<StoreItem>(); 

foreach (var qi in qInventory) 
{ 
    resultPInventory.StoreInventory.Add(new StoreItem 
    { 
     StoreNum = qi.Store_Number, 
     Quantity = qi.Curr_Inv 
    }); 
} 

當然,如果您以後需要將qInventory用於其他事情,這將不是最好的方式。 (在這種情況下,你可以選擇多個字段)

PS,這裏是縮短你的代碼的方式,但我不知道,如果LINQ到實體將允許它,所以首先測試它:

resultPInventory.SKU = inputSKU; 
resultPInventory.StoreInventory = db.vw_Web_Store_Inventory_Live 
            .Where(qi => qi.Sku_Number == inputSKU) 
            .Select(qi => new StoreItem { StoreNum = qi.Store_Number, Quantity = qi.Curr_Inv }) 
            .ToList(); 
+0

這使得完整的意義,並解決了這個問題。感謝您的洞察力和幫助! –

-1

在添加新變量之前,將新StoreItem()分配給變量。

+3

請解釋這將如何解決問題。 –

+0

鑑於a)該列表已被初始化('新列表();'和b)OP正在添加新實例('resultPInventory.StoreInventory.Add(new StoreItem(...'),我看不見如何創建新的實例,然後*然後*添加它將解決問題..... – Tim