Mar*_*inD 1 c# linq ienumerable
我要收藏:
IEnumerable<lineResult> diplayedBondsList
Run Code Online (Sandbox Code Playgroud)
和
List<string> pIsinList
Run Code Online (Sandbox Code Playgroud)
lineResult是一个非常简单的类,定义如下:
Run Code Online (Sandbox Code Playgroud)public class lineResult { public string isin { get ; set ; } public double rate { get ; set ; } public string issuer { get ; set ; } }
我正在尝试使用pIsinList中的字符串创建一个新的List,但是只有当它们不在字段中时才是diplayedBondsList的"lineResult"元素.一种"左XOR"(左边是因为在另一个表中只添加了两个列表元素中的一个没有对应).
我试图不使用太多循环,因为我的列表有非常大量的数据,我认为这将减慢程序.
我写过这个,但它似乎不起作用,newBondLines总是空的:
IEnumerable<lineResult> newBondLines = diplayedBondsList.Where(item => pIsinList.IndexOf(item.isin) < 0);
foreach (lineResult lr in newBondLines)
{
newIsinList.Add(lr.isin);
}
Run Code Online (Sandbox Code Playgroud)
另外,我确实使用了一个循环,也许我可以通过一个很好的LINQ语句来避免它.
我怎么能1)使这个"左XOR"工作,2)提高速度?
使用Enumerable.Except:
List<string> xorred = pIsinList.Except(
diplayedBondsList.Select(x => x.isin)).ToList();
Run Code Online (Sandbox Code Playgroud)
请注意,这个命令会隐式地做Distinct()的pIsinList(东西是不是在MSDN解释,但如果你看看源是很清楚),所以如果你有new[] { "A", "A" }在pIsinList,最后的结果将是一个单一的"A".
你可以Except"手动"解决这个"问题"(如果有问题):
var set = new HashSet<string>(diplayedBondsList.Select(x => x.isin));
List<string> xorred = pIsinList.Where(x => !set.Contains(x)).ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1901 次 |
| 最近记录: |