我有两个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查询在同一张表中循环两次?
答案 0 :(得分:1)
提供的示例在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));
});