【发布时间】:2018-01-09 08:29:10
【问题描述】:
我曾尝试过类似的 SO 答案 here,但它不起作用,在我的情况下可能会遗漏一些东西。
背景:
我正在尝试从外部 API(大约 8k 条记录)中提取贸易工具列表,我只需要大约 10 条记录。所以试图过滤它如下,但过滤结果为 0 。
型号:
public class Trade
{
public int ID { get; set; }
public string Scrip { get; set; }
public int Quantity { get; set; }
}
过滤:
List<Trade> trades;
using (StreamReader sr = new StreamReader(Server.MapPath("~/Utils/trades.json")))
{
trades = JsonConvert.DeserializeObject<List<Trade>>(sr.ReadToEnd());
}
List<Instrument> instruments = GetInstruments(Exchange: "NY");// count 8k
var result = instruments.Where(x => trades.Any(n => x.Name.Contains(n.Scrip))); //count 0
另外,尝试从交易列表中获取 Scrip 名称作为字符串数组并用于过滤,这也不起作用。
请提前告知并感谢。
【问题讨论】:
-
调试器说什么?在
trades.Any(n => x.Name.Contains(n.Scrip))的一次出现上确定它,证明它对于实际数据中的至少一个条目是正确的。它是基本的东西吗,比如大小写不匹配(字符串比较默认区分大小写)? -
@dlatikay 调试器没有给我太多提示
-
成功了!你是它的老板 :)
-
您确定有一个
instrument,其Name包含trades中的一项的Script文本吗? -
你确定外壳也完全一样吗?也许您应该尝试使用标准的
foreach循环而不是 linq,这样您就可以在循环内设置条件断点。代码看起来不错,但没有实际的示例数据,我们能做的就这么多了。