1

コンボボックスから選択したアイテムに一致するアイテムを取得するために、これらのリストに取り組んでいます。

private void InitializaMessageElement()
{
    if (_selectedTransactionWsName != null)
    {
  1. ここのドロップダウンから選択した項目に一致するトランザクション Web サービス名を取得します。output=TestWS は正しいです

    var getTranTypeWsName = TransactionTypeVModel
         .GetAllTransactionTypes()
         .FirstOrDefault(transTypes => 
                 transTypes.WsMethodName == _selectedTransactionWsName);
    
  2. treenode リストから wsnames のリストをループします。ここでは、私が持っているすべての正しいノードが表示されます。

    var wsNameList = MessageElementVModel
         .GetAllTreeNodes().Select(ame => 
                 ame.Children).ToList();//. == getTranTypeWsName.WsMethodName);
    
  3. wsNameList で getTranTypeWsName.WsMethodName を見つけます。ここに問題があります:

       var msgElementList = MessageElementVModel.GetAllTreeNodes()
                                                     .Select(ame =>   ame.Children).Where(c =>
                                                         {
                                                             c.Where(d =>     getTranTypeWsName != null && d.Name == getTranTypeWsName.WsMethodName);
                                                             return false;
                                                         });
    

私の MsgElement リスト:

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

ここでは間違ったデータを返しています。フィルタリングされていないリストをすべて返します。出力が一定しないのはなぜですか? 私はLINQが初めてです。

4

2 に答える 2

0

コードのこの部分に問題があるようです:

   var msgElementList = wsNameList.SingleOrDefault(x =>
            {
                x.Where(ame => ame.Name == getTranTypeWsName.WsMethodName);
            return true;

            });

リストを期待していましたが、SingleOrDefault() を使用しました。これは、単一のレコードを取得するために使用することを意図しています。

msgElementList を取得する、これを試してください。最初にすべてのツリー ノードを取得して wsNameList に格納する必要はありません。

// Assumed that Name is a property of Children
    var msgElementList = MessageElementVModel.GetAllTreeNodes()
        .Select(ame => ame.Children).Where(c => c.Name == getTranTypeWsName.WsMethodName).ToList();
于 2013-06-17T03:26:05.273 に答える