我正在处理这些列表,以获得与组合框中所选项目匹配的项目。
private void InitializaMessageElement()
{
if (_selectedTransactionWsName != null)
{
从下拉列表中获取与所选项目匹配的事务Web服务名称,输出= TestWS,这是正确的
var getTranTypeWsName = TransactionTypeVModel
.GetAllTransactionTypes()
.FirstOrDefault(transTypes =>
transTypes.WsMethodName == _selectedTransactionWsName);
从treenode列表中循环wsnames列表。在这里它给了我所有正确的节点。
var wsNameList = MessageElementVModel
.GetAllTreeNodes().Select(ame =>
ame.Children).ToList();//. == getTranTypeWsName.WsMethodName);
在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的新手。
答案 0 :(得分: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();
答案 1 :(得分:0)
这是一个解决方案:
var msgElementList = wsNameList.SelectMany(x =&gt; x.Where(ame =&gt; getTranTypeWsName!= null&amp;&amp; ame.Name == getTranTypeWsName.WsMethodName))。ToList();