簡體   English   中英

使用LINQ返回產品價格,函數中使用哪種返回類型?

[英]return product price using LINQ, what return type to use in function?

我剛剛開始使用LINQ,並且嘗試從數據庫中選擇產品價格並返回產品價格,如下所示:

public int GetPricePerKg(Product prod)
{
    var result = from p in dc.Products
                 where p.pk_product_id == prod.pk_product_id
                 select p.product_price_kg;
    return result;
}

這給了我錯誤:

無法將類型' System.Linq.IQueryable<int?> '隱式轉換為' int '

處理此問題的最佳方法是什么? 我需要價格(在這種情況下為int),並在其他地方進行一些計算

謝謝!

好吧,您選擇了一個查詢 -理論上可以匹配0、1或多個記錄。 您想在每種情況下做什么? 另外,看起來product_price_kgint? -如果為空,您想怎么辦?

可能想要:

public int GetPricePerKg(Product prod)
{
    return dc.Products.Where(p => p.pk_product_id == prod.pk_product_id)
                      .Select(p => p.product_price_kg)
                      .Single()
                      .Value;
}

...但如果要么不是正好有一個匹配的產品價格屬性為null,將拋出異常。

如果需要,您仍然可以使用查詢表達式-但在某些簡單情況下,您通常不想在結尾添加一個方法調用。 查詢表達式的等效項是:

return (from p in dc.Products
        where p.pk_product_id == prod.pk_product_id
        select p.product_price_kg).Single().Value;

另外,您可以使用帶有謂詞的Single()版本,如下所示:

return dc.Products.Single(p => p.pk_product_id == prod.pk_product_id)
                  .product_price_kg.Value;

毫無疑問,還有其他變體-它們都將做同樣的事情-選擇您認為可讀性最高的那個。

編輯:其他選項,而不是Single是:

  • First (應對1個或更多)
  • FirstOrDefault (處理0、1或更多)
  • SingleOrDefault (處理0或1)

對於OrDefault版本,如果您不匹配任何產品,則需要解決該怎么辦。

您需要做(如果您只想讓第一場比賽回來)

public int GetPricePerKg(Product prod)
    {
        var result = (from p in dc.Products
                     where p.pk_product_id == prod.pk_product_id
                     select p.product_price_kg).FirstOrDefault();
        return result;
    }

John Skeet和saj的回答都是正確的。 這只是與您發布的代碼更加一致的另一種替代語法:

public int GetPricePerKg(Product prod)
{
    var result = from p in dc.Products
                 where p.pk_product_id == prod.pk_product_id
                 select p.product_price_kg;
    return result.FirstOrDefault();
}

您必須使用FristOrDefault()擴展方法

public int GetPricePerKg(Product prod)
{
    var result = (from p in dc.Products
                 where p.pk_product_id == prod.pk_product_id
                 select p.product_price_kg).FirstOrDefault();
    return result;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM