2

こんにちは、selectlistitems をコントローラーに返すビジネス ロジック レイヤーがあるので、それがビューに渡されて選択リストに入力されます。

私は動作するこの方法を持っています:

 public IEnumerable<SelectListItem> GetDevices
    {
      get
      {
        using (IDeviceData repository = _dataFactory.Create())
        {
          return repository.DeviceTypes.ToList()
            .Where(dt => dt.ParentId == 10 )
             .Select(dt =>
             new SelectListItem
             {
               Text = (dt.Name).Trim(),
               Value = dt.Id.ToString()
             });
        }
      }
    }

そして、これはそうではありません:

 public IEnumerable<SelectListItem> GetGroups(int deviceTypeId)
    {
        using (IDeviceData repository = _dataFactory.Create())
        {
          return repository.DeviceTypeConfigurationParameterGroupMaps.ToList()
            .Where(cm => cm.DeviceTypeId == deviceTypeId)
            .Join(repository.ConfigurationParameterGroups, cm => cm.ConfigurationParameterGroupId, cg => cg.Id, (cm, cg) => new { cm, cg })
             .Select(cg =>
             new SelectListItem
             {
               Text = (cg.cg.Name).Trim(),
               Value = cg.cg.Id.ToString()
             });
        }
      }

明らかな違いは、2 つのテーブル間の結合です。受け取るエラーは次のとおりです。

Results View = The type '<>f__AnonymousType0<p,d>' exists in both 'System.Web.dll' and 'EntityFramework.dll'

これは、デバッグ中に結果を展開しようとしたときに受信されます。私はLINQにあまり慣れていないので、どんなアドバイスも大歓迎です

4

1 に答える 1

1

理解した:

public IEnumerable<SelectListItem> GetGroupsForDevice(int deviceTypeId)
    {
        using (IDeviceData repository = _dataFactory.Create())
        {
          return repository.DeviceTypeConfigurationParameterGroupMaps
            .Where(cm => cm.DeviceTypeId == deviceTypeId)
            .Join(repository.ConfigurationParameterGroups, cm => cm.ConfigurationParameterGroupId, cg => cg.Id, (cm, cg) =>  cg )
            .ToList()
            .Select(cg =>
             new SelectListItem
             {
               Text = (cg.Name).Trim(),
               Value = cg.Id.ToString()
             }).ToList()  ;

        }
      }

結合後に追加する必要がToList()あり、SelectlistItem に変換した後に再度追加する必要がありました。また、新しい匿名型を作成する必要もありませんでした - 上記の joanna に感謝します。

これが答えですが、良い説明ではありません。誰かが少し補足したい場合は、お気軽に!

于 2013-02-26T10:41:24.843 に答える