2014-10-07 48 views
0

我有一個表在我的數據庫中有四列(priceId,price,orderId,projectId,customerId,categoryId)。 如果我有categoryId 1並選擇具有該值的所有行。MVC5 EF CodeFirst根據語句選擇

從這個結果我想要選擇在這個優先級第一個,有orderId,第二個有projectId,第三個有customerId和最後一個在customerid,porjectid和orderid上有空(空)。

該表格是價格矩陣,用於存儲我的類別和我的項目,訂單或客戶的價格可以具有唯一的價格。

有人知道我怎麼能在mvc 5 C#中用LINQ做查詢嗎? Iam卡在這個上。

謝謝!

+0

你能舉個例子嗎?而MVC與Linq btw無關。 – Maarten 2014-10-07 13:57:10

+0

我想我理解你的第一段。你從你的表中選擇了categoryId爲1的所有東西。我需要對你的第二段作一些澄清。你說你想從第一個結果中選擇一個特定的優先級?你的意思是你想要排序第一個查詢的結果,還是現在正在基於第一個查詢創建4個新的查詢,還是我完全錯了? – Zack 2014-10-07 14:00:35

+0

你幾乎是對的。它針對基於第一個查詢的新查詢。如果它有一個orderid我想選擇該行的價格。如果orderId是空的。我想檢查下一個女巫是projectId,如果這也是空的,我想檢查下,customerId,如果這也是空的我想要的行與空訂單,項目和客戶的價格。 – 2014-10-07 14:08:37

回答

0

您可以通過訂購的結果做到這一點:

var products = from p in Products 
       where p.Category == categoryId 
       orderby !p.orderId.HasValue, 
         !p.projectId.HasValue, 
         !p.customerId.HasValue, 
         p.Name 
       select p.price; 

var result = procucts.FirstOrDefault(); 

orderId會在頂部的記錄(false自帶true之前)。如果沒有,那麼projectId將位於頂部,依此類推。

我不知道如果「一直的OrderID」你的意思是有一個orderid(即不爲空),或具有特定orderid。如果後者是真的,你可以改變謂詞:

var products = from p in Products 
       where p.Category == categoryId 
       orderby !p.orderId == orderId, 
         !p.projectId == projectId, 
         !p.customerId == customerId, 
         p.Name 
       select p.price; 
0

這不是優雅的,但它應該完成工作。

 using (var context = new NameofEntity()) 
     { 
      var result = context.NameofEntityObject 
       .Where(a => a.categoryId == 1); 

      var result1 = result 
       .Where(a => a.orderId != null) 
       .FirstOrDefault() 
       .price; 

      var result2 = result 
       .Where(a => a.projectId != null) 
       .FirstOrDefault() 
       .price; 

      var result3 = result 
       .Where(a => a.customerId != null) 
       .FirstOrDefault() 
       .price; 

      var result4 = result 
       .Where(a => a.orderId == null) 
       .Where(a => a.projectId == null) 
       .Where(a => a.customerId == null) 
       .FirstOrDefault() 
       .price; 
     } 

     if (result1 != null) 
      return result1; 
     if (result2 != null) 
      return result2; 
     if (result3 != null) 
      return result3; 

      return result4;