70

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

この状況をばかげていると言うのは控えめな表現です。

4

5 に答える 5

129

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;
于 2013-03-22T18:58:23.197 に答える
20

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

database.Stores.Where(s => s.CompanyID == curCompany.ID)
               .Select(s => new SelectListItem
                   {
                       Value = s.Name,
                       Text = s.ID
                   });
于 2013-03-22T18:58:22.610 に答える
17

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

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

于 2013-03-22T18:58:08.950 に答える
0

ラムダ式の使用:

  1. 結果をバインドする特定のクラスがない場合:

     var stores = context.Stores.Select(x => new { x.id, x.name, x.city }).ToList();
    
  2. 特定のクラスがある場合は、結果をそれにバインドする必要があります。

    List<SelectListItem> stores = context.Stores.Select(x => new SelectListItem { Id = x.id, Name = x.name, City = x.city }).ToList();
    

単純な LINQ 式の使用:

  1. 結果をバインドする特定のクラスがない場合:

    var stores = (from a in context.Stores select new { x.id, x.name, x.city }).ToList();
    
  2. 特定のクラスがある場合は、結果をそれにバインドする必要があります。

    List<SelectListItem> stores = (from a in context.Stores select new SelectListItem{ Id = x.id, Name = x.name, City = x.city }).ToList();
    
于 2018-09-20T13:33:16.513 に答える