2015-02-05 39 views
0

我是新來EF和Linq實體。我想獲得一個名稱爲「Value」的列,其類型是一個浮點數。我的代碼如下所示。所以當我調用下面的方法時,我得到一個錯誤的行雙價格.....輸入字符串不是在一個正確的格式。有沒有辦法返回列「價值」作爲一個雙?或者我如何將它轉換爲Double。提前致謝。如何獲得一個列的類型是浮動使用LINQ實體

public double calculate_price(int code, int quatity) 
    { 
     using(var context = new DryTypeEntities()) 
     { 
      var result = context.Table_Products.Where(p => p.Code == 3).Select(p => p.Value) ;    
      string something = result.ToString(); 
      double price = Convert.ToDouble(something); 
      double quant = Convert.ToDouble(quatity); 
      double total = price * quant; 
      return total ;        
     } 

    } 

回答

0

這返回的Value的集合:

var result = context.Table_Products 
        .Where(p => p.Code == 3) 
        .Select(p => p.Value); 

這,然後,存儲您的收藏中something字符串表示(不是你想要的):

string something = result.ToString(); 
    // System.Collections.Generic.List`1[System.Int32] or something equally unhelpful 

這不可能轉換爲價格,因此失敗:

double price = Convert.ToDouble(something); // uh, no. 

相反,一種選擇是讓第一個記錄:

var result = context.Table_Products 
        .Where(p => p.Code == 3) 
        .Select(p => p.Value); 
        .First(); 

或者,如果有保證是隻有一個匹配的「代碼」 3:

var result = context.Table_Products 
        .Where(p => p.Code == 3) 
        .Select(p => p.Value); 
        .Single(); 

現在result包含一個Value,你可以以單一價值工作。

還有其他的東西也要考慮(即如果沒有匹配的記錄,如果有多個記錄要迭代,等等),但這應該讓你再次去。最後一點 - consider using decimal for money values而不是double

+1

',你可以用單record'工作,以確保被燒着,最好是使用'Single' :) – 2015-02-05 19:14:01

+0

@HamletHakobyan同意。很難說OP的期望是什麼,但假設每個「代碼」只有一個匹配記錄,那就更準確了。更新。 – 2015-02-05 19:17:28

+0

@Grant如何檢查沒有匹配的記錄。插入新記錄時。你使用int num = context.SaveChanges。但是,你如何處理我的案件? – CodeEngine 2015-02-05 19:25:15

1

select將不會返回您期望的值。

更改爲。

var result = context.Table_Products.Where(p => p.Code == 3).Select(p => p.Value).FirstOrDefault() ; 

您可能應該檢查結果是否爲空。

1

這個錯誤意味着A)something是一個字符串而不是一個雙精度值,並且B)something的內容沒有以正確的格式轉換爲double。

你還沒有顯示什麼東西contains但這就是你應該看的。

因此,在你想要的猜測,你可能想要做這樣的事情:

using(var context = new DryTypeEntities()) 
{ 
    var result = context.Table_Products.Where(p => p.Code == 3).Select(p => p.Value) ;    
    foreach (var r in result) 
    { 
     double price = Convert.ToDouble(r); 
     // There is no quatity returned by your query 
    } 
} 

注1:您查詢具體選擇Value,所以結果只包含值列。該查詢沒有返回值quatity

注2:您的查詢返回一個集合(一組零個或多個元素),而不僅僅是一個元素。我想這是你真正想要的:

using(var context = new DryTypeEntities()) 
{ 
    var result = context.Table_Products.FirstOrDefault(p => p.Code == 3);    
    return result.Value * result.quantity; 
} 
相關問題