2

NULL 値を含む可能性のある TradeNo という INT フィールドがあります。要件は、ドロップダウンに「契約 ID」と「取引番号」を括弧で囲んで表示し、「取引番号」が null の場合は N/A を表示することです。

Example:
44444 (2222)
55555 ( N/A )

これが私がうまくいくと思ったものです。これは SelectList を返す私の関数です

public IEnumerable<SelectListItem> GetContractsBySupplierDropDown(string supplier)
{
    var result = from c in context.Contracts 
                     where c.Supplier==supplier 
                     orderby c.ContractID
                     select new { 
                            Text = c.ContractID.ToString() + " (" + 
                                   (c.TradeNo.HasValue  ? 
                                       c.TradeNo.Value.ToString() : 
                                       " N/A ").ToString() + 
                                    " )", 
                            Value = c.ContractID };

    return new SelectList(result, "Text", "Value"); 
}

返されるエラーは次のとおりです。

LINQ to Entities does not recognize the method 'System.String ToString()'
method, and this method cannot be translated into a store expression.

私が知る限り、表示されるエラーは、EF が ToString をデータベース関数に変換しようとしていることを意味しますか?

4

1 に答える 1

2

ToString残念ながら、データベースからの数値フィールドでは使用できません。

回避策として、実行するToList前にキャストできるため、コンテンツはメモリ内にあります。

public IEnumerable<SelectListItem> GetContractsBySupplierDropDown(string supplier)
{
    var query =  from c in context.Contracts 
                 where c.Supplier==supplier 
                 orderby c.ContractID
                 select new {
                     c.ContractID,
                     c.TradeNo,

                 };
    var result = from c in query.ToList()
                 select new { 
                            Text = c.ContractID.ToString() + " (" + 
                                   (c.TradeNo.HasValue  ?
                                       c.TradeNo.Value.ToString() : 
                                       " N/A ") + 
                                    " )", 
                            Value = c.ContractID
                  };

    return new SelectList(result, "Text", "Value");
}
于 2012-07-24T13:34:49.427 に答える