web-dev-qa-db-ja.com

LINQ selectステートメントでLambdaを使用する方法

ラムダ関数を使用してストアを選択し、結果を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 };

この状況を不条理と呼ぶのは控えめです。

52
Bill

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;
109
Russ Cam

なぜすべてのLambda構文を使用しないのですか?

database.Stores.Where(s => s.CompanyID == curCompany.ID)
               .Select(s => new SelectListItem
                   {
                       Value = s.Name,
                       Text = s.ID
                   });
17
Justin Niessner

クエリ式の構文と「通常の」ラムダ式の構文を混在させようとしているようです。次のいずれかを使用できます。

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つを混在させることはできません。

16
Jon Skeet

ラムダ式の結果

var storesList = context.Stores.Select(x => new { Value= x.name,Text= x.ID }).ToList();
3
Gurbaksh Singh