我有一个类型
public class One
{
public string firstString { get; set; }
public string secondString { get; set; }
}
和IEnumerable:
IEnumerable<One> firstIEnumerable;
在程序执行期间,我得到另一个IEnumerable,
IEnumerable<string> secondIEnumerable = List<string>.Where(...);
我想要的是使用firstIEnumerable
secondString
成员之间的平等以及来自{{1的任何值}请求firstIEnumerable
firstString
secondIEnumerable
}}
我想象一个这样的命令:
IEnumerable<string> thirdIEnumerable =
firstIEnumerable.Where(m=>m.firstString == secondIEnumerable.? ? ? ? ?).secondString;
但它没有编译。
答案 0 :(得分:1)
如果我理解正确,您希望<{>>选择 secondString
firstString
中secondIEnumerable
包含的每个项目:var result = firstIEnumerable.Where(item => secondIEnumerable.Contains(item.firstString))
.Select(item => item.secondString);
:
var result = from item in firstIEnumerable
where secondIEnumerable.Contains(item.firstString)
select item.secondString;
查询语法可能更好:
f.ShowCodes = true;
para.Range.InsertAfter("\r\n");
答案 1 :(得分:1)
也许你可以使用它:
IEnumerable<string> thirdEnumerable = from firstItem in firstIEnumerable
from secondItem in secondIEnumerable
where firstItem.firstString == secondItem
select firstItem.firstString;
或者这种内联方式:
IEnumerable<string> thirdEnumerable2 = firstIEnumerable.Select(x => x.firstString).Intersect(secondIEnumerable);
答案 2 :(得分:1)
如果第二个可枚举是一个长序列,你可能(检查基准)最好做两次传递并创建一个哈希集,而不是做O(N * M)算法。 O(N * M)就是:
first.Where(x => second.Contains(x.firstString)).Select(x => x.secondString)
使用哈希集:
var hashSet = new HashSet<string>(second);
first.Where(x => hashSet.Contains(x.firstString)).Select(x => x.secondString)
第二种选择可能会在大多数情况下提供更好的性能。