gpt4 book ai didi

c# - 具有两个不同条件的同一列上的数据表选择 linq 查询导致零行

转载 作者:太空宇宙 更新时间:2023-11-03 13:41:59 25 4
gpt4 key购买 nike

IEnumerable<DataRow> mergedRows = from myRow in _gridData.AsEnumerable()
select myRow;

IEnumerable<DataRow> rows;

rows = from myRow in mergedRows where
double.Parse(myRow["signalName"].ToString())> 1800 &&
select myRow;

mergedRows = rows;
IEnumerable<DataRow> rows;//reinitializing
rows = from myRow in mergedRows where
double.Parse(myRow["signalName"].ToString()) < 2400
select myRow;

上面一个给我零结果,这是错误的..当查询第二次运行时,mergedRows 在第一个条件之后有结果数据。在第二次查询执行后我仍然没有得到结果。

但是具有组合条件的相同查询工作正常。

IEnumerable<DataRow> mergedRows = from myRow in _gridData.AsEnumerable()
select myRow;
IEnumerable<DataRow> rows;

rows = from myRow in mergedRows where
double.Parse(myRow[signalName].ToString()) > 1800 &&
double.Parse(myRow[signalName].ToString()) < 2400
select myRow;

这个给我正确的准确结果。

你能解释一下为什么吗..

最佳答案

我认为您可能遇到了“deferred execution”问题。

这包含您的“源”数据

 IEnumerable<DataRow> mergedRows = from myRow in _gridData.AsEnumerable()
select myRow;

这包含您的查询,但尚未实际执行。

IEnumerable<DataRow> rows = from myRow in mergedRows where  
double.Parse(myRow["signalName"].ToString())> 1800
select myRow;

然后这会用未执行的查询覆盖您的源数据

mergedRows = rows;

您可以尝试通过将查询包装在 .ToList() 中来贪婪地执行查询;

IEnumerable<DataRow> mergedRows = from myRow in _gridData.AsEnumerable()
select myRow;

var rows = (from myRow in mergedRows where
double.Parse(myRow["signalName"].ToString())> 1800 &&
select myRow).ToList();

mergedRows = rows;


rows = (from myRow in mergedRows where
double.Parse(myRow["signalName"].ToString()) < 2400
select myRow).ToList();

如果您总是要执行这两个过滤器,我会考虑只清理整个事情并将您的所有工作合并到一个查询中。

private double SafeParse(string s)
{
double d;
return double.TryParse(s, out d) ? d : 0; //return zero if the value is unparsable
}


var results = (from myRow in _gridData.AsEnumerable()
let d = SafeParse(myRow[signalName].ToString())
where d > 1800 && d < 2400
select myRow).ToList();

关于c# - 具有两个不同条件的同一列上的数据表选择 linq 查询导致零行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16708855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com