优化C#代码:var ErtQuery = tQuery.Where(o => o.Process == "26").Select(p => p.Barcode).ToList(); var YitQuery = tQuery.Where(o => o.Process == "17").ToList(); List<string> asss = new List<string>(); foreach (var item in ErtQuery) { var tong = YitQuery.FirstOrDefault(o => o.Barcode == item); YitQuery.Remove(tong); }
时间: 2024-02-10 09:26:24 浏览: 83
你可以尝试使用LINQ的Join操作来优化这段代码,以避免使用循环和手动删除元素的操作。以下是优化后的代码:
```csharp
var ErtQuery = tQuery.Where(o => o.Process == "26").Select(p => p.Barcode).ToList();
var YitQuery = tQuery.Where(o => o.Process == "17").ToList();
var result = from e in ErtQuery
join y in YitQuery on e equals y.Barcode
select y;
YitQuery.RemoveAll(y => result.Contains(y));
```
这里使用了Join操作来将两个列表根据Barcode进行连接,然后使用Contains方法来筛选出需要删除的元素,最后使用RemoveAll方法来移除这些元素。
注意:在优化代码之前,请确保对应的数据类型和需求已经正确理解,以免引入错误。
相关问题
优化C#代码:var ErtQuery = tQuery.Where(o => o.Process == "26").Select(p => p.Barcode).ToList(); var YitQuery = tQuery.Where(o => o.Process == "17").ToList(); List<string> asss = new List<string>(); foreach (var item in ErtQuery) { var tong = YitQuery.FirstOrDefault(o => o.Barcode == item); tQuery.Remove(tong); }
您可以尝试优化这段代码,使其更加简洁和高效。下面是优化后的代码示例:
```csharp
var ErtQuery = tQuery.Where(o => o.Process == "26").Select(p => p.Barcode).ToList();
var YitQuery = tQuery.Where(o => o.Process == "17").ToList();
tQuery.RemoveAll(o => YitQuery.Any(y => y.Barcode == o.Barcode));
```
这里使用了 `RemoveAll` 方法来移除满足条件的元素,而不是使用 `FirstOrDefault` 来逐个查找并移除。同时,使用 `Any` 方法来判断元素是否存在于列表中,也能更快地进行判断。
请注意,优化代码之前,请确保对原始代码进行了充分的测试和验证,以确保逻辑正确性和预期结果的一致性。
优化C#代码:var ErtQuery = tQuery.Where(o => o.Process == "26").ToList(); var YitQuery = tQuery.Where(o => o.Process == "17").ToList(); YitQuery.RemoveAll(o => ErtQuery.Select(p => p.Barcode).Contains(o.Barcode)); var tQuery1 = YitQuery. Select(o => new FireRecord { Material = o.Material, TFireQty = !o.ChangeRemark.Contains("成检变更") ? o.Qty : 0, TChangeFireQty = o.ChangeRemark.Contains("成检变更") ? o.Qty : 0 }).ToList();
您可以尝试进一步优化这段代码,使其更加简洁和高效。下面是优化后的代码示例:
```csharp
var ErtQuery = tQuery.Where(o => o.Process == "26").ToList();
var YitQuery = tQuery.Where(o => o.Process == "17").ToList();
var ErtBarcodes = new HashSet<string>(ErtQuery.Select(p => p.Barcode));
YitQuery.RemoveAll(o => ErtBarcodes.Contains(o.Barcode));
var tQuery1 = YitQuery.Select(o => new FireRecord
{
Material = o.Material,
TFireQty = o.ChangeRemark.Contains("成检变更") ? 0 : o.Qty,
TChangeFireQty = o.ChangeRemark.Contains("成检变更") ? o.Qty : 0
}).ToList();
```
在这里,使用了 `HashSet<string>` 来存储 `ErtQuery` 中的 `Barcode` 值,以便更快地进行元素是否存在的判断。同时,合并了 `TFireQty` 和 `TChangeFireQty` 的计算,并使用三元表达式来简化逻辑。
请注意,优化代码之前,请确保对原始代码进行了充分的测试和验证,以确保逻辑正确性和预期结果的一致性。
阅读全文