我试图获得一个嵌套列表的结果列表。我需要fileds[3]
具有所有Symbol
类的字段。
我的c#模型是:
public class Watchlist
{
public Watchlist(object[] fields)
{
WatchlistId = (int)fields[0];
AccountId = (string)fields[1];
Name = (string)fields[2];
SymbolList = SetSymbolData(fields[3]);
}
public int WatchlistId { get; set; }
public string AccountId { get; set; }
public string Name { get; set; }
public List<Symbol> SymbolList { get; set; }
}
public class Symbol
{
public Symbol() { }
public Symbol(object[] fields)
{
Ticker = fields[0] == null ? "" : fields[0].ToString();
Exchange = fields[1] == null ? "" : fields[1].ToString();
Name = fields[2] == null ? "" : fields[2].ToString();
}
public string Ticker { get; set; }
public string Name { get; set; }
public string Exchange { get; set; }
}
当前的SQL是这样的:
SELECT w.Id, w.Account_id, w.Name, s.symbol, s.name, s.exchange FROM
(SELECT Id, Account_id, Name FROM Watchlists where Account_id = @AccountId) w
JOIN WatchlistSymbols ws ON w.Id = ws.WatchlistId
JOIN Symbols s ON s.id = ws.SymbolId
结果:
Id Account_id Name symbol name exchange
----------- -----------------------------------------------------
26 123 TEST AAA Listed Funds PACF
26 123 TEST ACQRU Independence NQSC
26 123 TEST ACTD ArcLight NQSC
但是这将为每个监视列表符号组合返回单行。
SQL数据库的结果集总是一个表,每行有固定数量的列,你不能得到' jagged"或";nested">
你有三个选择。
一种是将SQL Server的输出更改为JSON,并使用Newtonsoft nuget包来解析JSON。
另一种方法是读取结果集并在c#中编写自己的嵌套循环来处理行。
第三种方法是使用对象关系映射器,并告诉它如何解析表格结果集。下面是使用Dapper
的示例解决方案