c# - 如何将两个 LINQ 合二为一?
问题描述
我有两个 Linq 查询
dTable.AsEnumerable()
.Where(s => Convert.ToString(s["OccpStat"]).ToLower().Equals("i"))
.ToList()
.ForEach(D => D.SetField("OccpStat", Convert.ToBoolean(1)));
dTable.AsEnumerable()
.Where(s => Convert.ToString(s["OccpStat"]) != ("True"))
.ToList()
.ForEach(D => D.SetField("OccpStat", Convert.ToBoolean(0)));
基本上它与 DataTable 一起使用,如果单元格是“I”则更改单元格的值,如果不是“I”则为 1,则为 0
有没有机会以某种方式将它们合并到一个 LINQ 中,然后向其中插入一些 If 语句,而不是使用两个 linq 查询在同一个表中循环两次?
解决方案
提供了四次采样循环DataTable
:调用时两次,调用ToList
时两次ForEach
。
下一种方法可用于将两个给定的 LINQ 查询重写为一个,它将循环两次DataTable
:
dTable.AsEnumerable()
// First loop.
.ToList()
// Second loop.
.ForEach(D =>
{
string OccpStat = Convert.ToString(D["OccpStat"]);
if (OccpStat.ToLower().Equals("i"))
D.SetField("OccpStat", Convert.ToBoolean(1));
else
D.SetField("OccpStat", Convert.ToBoolean(0));
});
如果您只想循环一次,DataTable
那么您应该声明自己的ForEach
方法并删除对ToList
方法的调用:
public static void ForEach<T>(this IEnumerable<T> items, Action<T> action)
{
foreach (T t in items)
action(t);
}
...
dTable.AsEnumerable()
.ForEach(D =>
{
string OccpStat = Convert.ToString(D["OccpStat"]);
if (OccpStat.ToLower().Equals("i"))
D.SetField("OccpStat", Convert.ToBoolean(1));
else
D.SetField("OccpStat", Convert.ToBoolean(0));
});
推荐阅读
- typescript - 将图像上传到 Firestore 存储时出现问题
- arrays - 合并 Yaml 数组嵌套
- python-3.x - 训练损失和准确率不会改变——停留在一个值附近——Tensorflow
- python - 如何在python中找到掷骰子程序的最小值和最大值
- javascript - 如何在javascript中的进程之间共享列表
- mysql - 您如何使用 MySQL WITH RECURSIVE 制作分层帐户图表?
- node.js - ccxt 加密 API - 它是否支持 OAuth 访问令牌?
- python - 如何 !rm python_var(在 Jupyter 笔记本中)
- verilog - iverilog 模拟器如何解释我的 RAM 代码以确定“x”值?
- android - 忽略特定文件的 IconDensities lint 警告