【问题标题】:cannot convert from 'System.Collections.Generic.IEnumerable<System.Collections.Generic.IEnumerable to System.Collections.Generic.List无法从 'System.Collections.Generic.IEnumerable<System.Collections.Generic.IEnumerable 转换为 System.Collections.Generic.List
【发布时间】:2013-06-13 16:55:51
【问题描述】:

我正在处理这些列表以从组合框中获取与所选项目匹配的项目。

private void InitializaMessageElement()
{
    if (_selectedTransactionWsName != null)
    {
  1. 从此处的下拉列表中获取与所选项目匹配的事务网络服务名称,输出=TestWS 这是正确的

    var getTranTypeWsName = TransactionTypeVModel
         .GetAllTransactionTypes()
         .FirstOrDefault(transTypes => 
                 transTypes.WsMethodName == _selectedTransactionWsName);
    
  2. 从树节点列表中循环 wsnames 列表。在这里,它给了我所有正确的节点。

    var wsNameList = MessageElementVModel
         .GetAllTreeNodes().Select(ame => 
                 ame.Children).ToList();//. == getTranTypeWsName.WsMethodName);
    
  3. 在 wsNameList 中找到 getTranTypeWsName.WsMethodName。这是我遇到问题的地方:

          var msgElementList = wsNameList.Select(x => x.Where(ame => getTranTypeWsName != null && ame.Name == getTranTypeWsName.WsMethodName)).ToList();
    

我的 MsgElement 列表:

   _msgElementObsList = new ObservableCollection<MessageElementViewModel>(msgElementList);
    this.messageElements = _msgElementList;
    NotifyPropertyChanged("MessageElements");
}

这里抛出异常Cannot convert from 'System.Collections.Generic.IEnumerable&lt;System.Collections.Generic.IEnumerable to System.Collections.Generic.List).

【问题讨论】:

  • 编译器究竟为哪一行抛出异常?
  • MsgElementObsList = new ObservableCollection(msgElementList); ... msgElementList 是有错误的。

标签: linq


【解决方案1】:

您有一个 IEnumerable 列表而不是 MessageElementViewModel 列表。这就是你抛出错误的原因。

不确定你需要哪一个,但你可以像这样修复你的 Select 函数。

var msgElementList = wsNameList.Select(x => x.Where(ame => getTranTypeWsName != null && ame.Name == getTranTypeWsName.WsMethodName).First()).ToList();

或

var msgElementList = wsNameList.SelectMany(x => x.Where(ame => getTranTypeWsName != null && ame.Name == getTranTypeWsName.WsMethodName)).ToList();

【讨论】:

    【解决方案2】:

    你能把你的msgElementList改成

    var msgElementList = wsNameList.Where(x => x.Name == getTranTypeWsName.WsMethodName).ToList();?
    

    getTranTypeWsName != null 不属于其中,我认为不属于,因为它无法与任何 lambda 成员进行比较。

    【讨论】:

    • 谢谢。从@Ceres 得到答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2013-05-14
    相关资源
    最近更新 更多