我有两个相同类型的列表.该类型没有标识符或以编程方式区分的任何其他保证方式.
我希望A中不属于B的物品.
如果类型有标识符,我可以使用如下语句...
var result = listA
.Where(a => listB.Where(b => b.Id == a.Id).Count() == 0)
.ToList();
Run Code Online (Sandbox Code Playgroud)
到目前为止,我能做到这一点的唯一方法是使用循环,我将每个项目添加到原始列表中不出现的次数.
foreach (var val in listB.Select(b => b.val).Distinct())
{
var countA = listA.Where(a => a.val == val).Count();
var countB = listB.Where(b => b.val == val).Count();
var item = listA.Where(a => a.val == val).FirstOrDefault();
for (int i=0; i<countA-countB; i++)
result.Add(item);
}
Run Code Online (Sandbox Code Playgroud)
有没有更清洁的方法来实现这一目标?
编辑:这是列表中对象的简化版本.它来自一个正在击中另一个系统的Web服务.
public class myObject
{
public DateTime SomeDate { get; set; }
public decimal SomeNumber; { get; set; }
public bool IsSomething { get; set; }
public string SomeString { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我收到的数据对于SomeDate/SomeString具有相同的值,并且SomeNumber和IsSomething的值重复.两个对象可能具有相同的属性,但我需要将它们视为不同的对象.
试试这个:
var listA = new List<Int32> {1, 2, 2, 3, 5, 8, 8, 8};
var listB = new List<Int32> {1, 3, 5, 8};
var listResult = new List<Int32>(listA);
foreach(var itemB in listB)
{
listResult.Remove(itemB);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1366 次 |
| 最近记录: |