如何在sql server中获得嵌套列表



我试图获得一个嵌套列表的结果列表。我需要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

的示例解决方案

最新更新