2014-01-17 62 views
0

有一個表名Product內加入對實體框架

|ProductID|ProductName| 
    1   abc 
    2   xyz 

還有另一個表Product Status

Result在下面有三個值:

Result 
Value | Meta 
0  Not checked 
1  Failed 
2  Passed 

ProductCheckList 
ID(AutoGenerated) | ProductID(Foreign Key) | Stage | Result | 
    1     1       1  1 
    2     1       2  2 

在這個表中的每個產品都必須經過五個不同的階段。如果產品通過了所有階段,那麼產品將被給予質量檢查狀態,如果產品未通過任何階段,則由於質量失敗並返回生產而給出。

我必須顯示所有具有質量狀態的產品的列表,並根據其質量狀態突出顯示具有不同行顏色的行。我們正在使用實體框架,我對此很陌生。

我曾想過爲此做一個包裝類。

Public class ProductWrapper 
{ 
    public Product product{get;set;} 
    Public string QualityStatus{get;set;} 
    public string BgColor {get;set;} 
} 

我寫這LINQ查詢:

UtilitiesEntities context = new UtilitiesEntities(); 
      List<ProductWrapper> wrapperList = new List<ProductWrapper>(); 
      var request = from product in context.Product 
          join productCheck in context.ProductCheckList 
          on product.productId equals productCheck .productID 
          // may be do group by or something i get the result and assign the values. 
          select new List<ProductWrapper> 
          { 

          }; 

我不能寫查詢並添加where條件獲取結果包裝類的列表傳遞給我的觀點預期的結果。

+0

什麼是「QualityStatus」哪裏是數據庫? – vorrtex

+0

@vorrtex它是基於字段結果ProductCheckList表的計算字段。如果對於產品,所有五個階段在結果列中都具有值2,則「QualityStatus」將通過相同的失敗。 – ankur

回答

0

如果我理解正確你的要求,你想是這樣的:

string goodQualityColor = "Green"; 
string badQualityColor = "Red"; 
string notCheckedColor = "Gray"; 
string notCheckedStatus = "Not Checked"; 
string failedStatus = "Failed"; 
string passedStatus = "Passed"; 

Dictionary<int,string> results= new Dictionary<int,string>(); 
results.Add(2,goodQualityColor); 
results.Add(1,badQualityColor); 
results.Add(0,notCheckedColor); 

Dictionary<int,string> qualityStatuses = new Dictionary<int,string>(); 
results.Add(2,passedStatus); 
results.Add(1,failedStatus); 
results.Add(0,notCheckedStatus); 

var request = (from product in context.Product 
       join productCheck in context.ProductCheckList 
       on product.productId equals productCheck.productID 
       select new 
       { 
       Product = product, 
       QualityStatus = productCheck.Result, 
       Result = productCheck.Result 
       }).ToList(); 

var finalResults = (from req in request 
        select new ProductWrapper 
        { 
         Product = req.Product, 
         QualityStatus = qualityStatuses.FirstOrDefault(s => s.Key == req.QualityStatus).Value, 
         BgColor = results.FirstOrDefault (s => s.Key == req.Result).Value 
        }).ToList<ProductWrapper>(); 
+0

它是基於字段結果ProductCheckList表的計算字段。如果對於產品,所有五個階段在結果列中都具有值2,則「QualityStatus」將通過相同的失敗。 – ankur

+0

@ankur好吧,我明白了。我更新了我的答案。 –

+0

謝謝你的回答。一件事是,如果任何產品通過了四個階段,並且一個產品失敗了,那麼它會被視爲失敗,但通過您的methotd則會被通過。 – ankur

0

我想創建一個外部聯接使用到關鍵字,然後做我statusCheck在選擇部分。
可能會是這個樣子:

var data = (from product in context.Product 
      join productCheck in context.ProductCheckList on product.productId equals productCheck.productID into productChecks 
      select new ProductWrapper 
      { 
       product = product, 
       passedBool = productChecks.All(pc => pc.Result == 2) && productChecks.Count() == 5 
      }).ToList();