ラムダ関数を使用してストアを選択し、結果をSelectListItemに変換してレンダリングできるようにしています。ただし、「Select句の式のタイプが正しくありません」エラーがスローされます。
IEnumerable<SelectListItem> stores =
from store in database.Stores
where store.CompanyID == curCompany.ID
select (s => new SelectListItem { Value = s.ID, Text = s.Name} );
ViewBag.storeSelector = stores;
何が間違っていますか?
編集:
また、この状況でIntをStringに変換するにはどうすればよいですか?以下は機能しません。
select (s => new SelectListItem { Value = s.ID.ToString(), Text = s.Name} );
select (s => new SelectListItem { Value = s.ID + "", Text = s.Name} );
編集2:
IntからStringへの変換を計算します。 int2string変換関数を含めることを忘れることは、Microsoftの典型です。完全に機能する構文で、誰もが使用している実際の回避策は次のとおりです。
select new SelectListItem { Value = SqlFunctions.StringConvert((double)store.ID), Text = store.Name };
この状況を不条理と呼ぶのは控えめです。
lINQクエリ式を使用する
IEnumerable<SelectListItem> stores =
from store in database.Stores
where store.CompanyID == curCompany.ID
select new SelectListItem { Value = store.Name, Text = store.ID };
ViewBag.storeSelector = stores;
またはラムダ式でLINQ拡張メソッドを使用する
IEnumerable<SelectListItem> stores = database.Stores
.Where(store => store.CompanyID == curCompany.ID)
.Select(store => new SelectListItem { Value = store.Name, Text = store.ID });
ViewBag.storeSelector = stores;
なぜすべてのLambda構文を使用しないのですか?
database.Stores.Where(s => s.CompanyID == curCompany.ID)
.Select(s => new SelectListItem
{
Value = s.Name,
Text = s.ID
});
クエリ式の構文と「通常の」ラムダ式の構文を混在させようとしているようです。次のいずれかを使用できます。
IEnumerable<SelectListItem> stores =
from store in database.Stores
where store.CompanyID == curCompany.ID
select new SelectListItem { Value = store.Name, Text = store.ID};
ViewBag.storeSelector = stores;
または:
IEnumerable<SelectListItem> stores = database.Stores
.Where(store => store.CompanyID == curCompany.ID)
.Select(s => new SelectListItem { Value = s.Name, Text = s.ID});
ViewBag.storeSelector = stores;
あなたがしようとしているように2つを混在させることはできません。
ラムダ式の結果
var storesList = context.Stores.Select(x => new { Value= x.name,Text= x.ID }).ToList();