web-dev-qa-db-ja.com

LINQ to Entitiesは、MVC 4のメソッド 'System.String ToString()'メソッドを認識しません

MVC 4を使用しており、Code First Migrationsを使用してデータベースを更新する必要があります。私がやろうとしているのは、データベーステーブルからレコードを選択し、それらをユーザーが選択できるドロップダウンリストに挿入することです。

理解できないエラーがあります:

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

コントローラー:

  public ActionResult Addnew()
        {
            var dba = new DefaultConnection();
            var query = dba.blob.Select(c => new SelectListItem
            {
                Value = c.id.ToString(),
                Text = c.name_company,
                Selected = c.id.Equals(3)
            });
            var model = new Companylist
            {
                xpto = query.AsEnumerable()
            };

            return View(model);
        }
33
user2232273

使用する場合...

Value = c.id + "",

の代わりに

Value = c.id.ToString(),

編集

このオプションでは、データベースからすべてのデータを取得するわけではありません

2
Leandro Soares

デリゲートを使用するだけです:

var query = dba.blob.Select(delegate(blob c)
{
    return new SelectListItem
        {
            Value = c.id.ToString(),
            Text = c.name_company,
            Selected = c.id.Equals(3)
        };
});
0
Ali7091

以下は、SelectListとして表示する方法です。

_ public List<BlobEntity> GetBlobs()
    {
        List<BlobEntity> blobs = null;
        using (var db = new MyDBEntities())
        {
            blobs = (from b in db.blobs
                     where b.id > 0 //Example filter
                     select new BlobEntity
                     {
                         ID = b.id,
                         CompanyName = b.name_company
                     }
                     ).ToList();

        }
        return blobs;
    }

   public static SelectList GetBlobsSelectList()
    {
        MyBL theBL = new MyBL();
        List<BlobEntity> blobEntites = theBL.GetBlobs();
        var listItems = blobEntites
             .Select(x => new SelectListItem { Text = x.CompanyName,
                                                Value = x.ID.ToString()
                                             })
             .ToList();
        SelectList blobsSelectList = new SelectList(listItems.AsEnumerable(), "Value", "Text");
        return blobsSelectList;
    }

   public class BlobEntity
   {
       public int ID { get; set; }
       public string CompanyName { get; set; }
   }
_

すべてのレコードとすべての列を選択している場合、現在受け入れられている回答(@VarunKによる)は問題ありません。ただし、そうでない場合は、ToList()を適用する前に、必要な列とレコードを使用して投影することをお勧めします。

なぜLINQ to Entitiesがメソッド 'System.String ToString()?を認識しないのかを見てください。

その他の参照: Linqからエンティティへのintから文字列への変換に関する問題

0
Lijo