c# – 用LINQ查询替换foreach
发布时间:2020-12-15 20:04:21 所属栏目:百科 来源:网络整理
导读:我的一个方法中有以下代码: foreach (var s in vars){ foreach (var type in statusList) { if (type.Id == s) { Add(new NameValuePair(type.Id,type.Text)); break; } }} 这似乎对我来说无效,我想知道是否有办法用LINQ查询替换至少一个foreach.有什么建议
我的一个方法中有以下代码:
foreach (var s in vars) { foreach (var type in statusList) { if (type.Id == s) { Add(new NameValuePair(type.Id,type.Text)); break; } } } 这似乎对我来说无效,我想知道是否有办法用LINQ查询替换至少一个foreach.有什么建议? 编辑:vars是一个字符串数组,Add方法将一个项添加到CSLA NameValueList. 解决方法
编辑:我没有注意到休息;之前
如果可能有多个具有相关ID的类型,则需要按照Keith’s answer或我的第二个代码示例使用FirstOrDefault. 编辑:删除“多个”版本,因为它不必要地低效,假设相等/哈希码适用于任何类型的类型.Id是. 但是,连接可能更合适: var query = from s in vars join type in statusList on s equals type.Id select new NameValuePair(type.Id,type.Text); foreach (var pair in query) { Add(pair); } 您可能想要创建一个采用IEnumerable< NameValuePair>的AddRange方法.此时你可以调用AddRange(查询). 或者,您可以使用LookUp.此版本确保每个“s”只添加一种类型. var lookup = types.ToLookup(type => type.Id); foreach (var s in vars) { var types = lookup[s]; if (types != null) { var type = types.First(); // Guaranteed to be at least one entry Add(new NameValuePair(type.Id,type.Text)); } } 这样做的好处是,它基本上只通过一次类型列表来构建字典. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |