c# - 编写 linq 查询以获取满足条件的记录
问题描述
我需要编写一个 linq 查询以从索引文件中获取所有记录(CompRecordPosition == 0 and DPNbr!=0) || (CompRecordPosition!=0)
。我已经编写了如下查询,但调试器卡在这一行而没有进一步处理。请帮助仅将那些索引记录获取到_wIndex
满足给定条件的变量
private List<WIndex> _wIndex;
private readonly string _FilePath;
internal const string _Key = "Test";
string idxData = File.ReadAllText(Path.Combine(_FilePath, _Key + ".ind"));
_wIndex = JsonConvert.DeserializeObject<List<WIndex>>(idxData);
_wIndex = _wIndex.Where(p2=>_wIndex
.Any(p1 => (p2.CompletionRecordPosition == 0 && p2.WbNewestDrlPmtNbr!=0) ||
p2.CompletionRecordPosition!=0)).ToList();
WIndex 类
public class WIndex
{
public string BaNo;
public long RecordPosition;
public long CompRecordPosition;
public long SegRecordPosition;
public string DataType;
public int RecordIndex;
public Int32 DpNbr;
}
索引文件
[{
"BaNo": "7000650000",
"RecordPosition": 345,
"CompRecordPosition": 567,
"SegRecordPosition": 788,
"DataType": "WELL",
"RecordIndex": 0,
"DPNbr": 0
},
{
"BaNo": "7000790001",
"RecordPosition": 800,
"CompRecordPosition": 0,
"SegRecordPosition": 0,
"DataType": "WELL",
"RecordIndex": 1,
"DPNbr": 810
}]
解决方案
您尝试执行的 linq 语句中提出了一些问题:
为什么在 where 子句中where
立即使用then 子句。any
我的建议是删除 any 子句,因为它不需要从列表中收集您请求的项目。
Any()
- 确定序列的元素是否存在或是否满足条件。
Where()
- 根据谓词过滤一系列值。
做出类似的声明_wIndex.Where(x => x.CompletionRecordPosition == 0 && x.WbNewestDrlPmtNbr != 0).ToList();
可能会更可取。
此外,.Any(p1 => ...
这里p1
永远不会在任何 lambda 表达式中使用或指示。可以作为集合之间的input parameter
关系被删除,p1
并且p2
永远不会在集合之间关联。最有可能导致调试停止并试图确定需要什么。
让我知道这是否有帮助 - 谢谢。
推荐阅读
- c# - 使用 XUnit 和 AspNetCore.TestHost 测试 .net 核心 web api 控制器文件上传
- reactjs - React Native - 在水龙头上正确播放 Lottie?
- nginx - 单个代理上的内部和外部服务
- python - 在 Pandas 中跨多个列的 if 语句
- csv - 使用 Linux 工具计算 csv 文件中数据的百分位数
- python - 如何使用 Flask 以管理员身份自动创建“.html”页面和路由?
- automation - 赛普拉斯 - 如何使用文本字段中的值获取元素
- activemq-artemis - ConnectionFactory 在共享时抛出错误
- django - 通过 TemplateView 保存表单
- amazon-web-services - 为 IP 设置 WAF 规则豁免