LINQ列表初始化程序未保持初始化的顺序
本文关键字:初始化 顺序 列表 程序 LINQ | 更新日期: 2023-09-27 18:21:10
我有以下问题:我从数据库中选择数据,并为表中的每个项目创建一个模型。该模型包含一个列表,其中包含3种语言的名称。但由于某些原因,LINQ没有保持我的列表初始化顺序。
代码:
db.SA_BamaType
.Select(b => new BamaTypeModel()
{
id = b.p_bamatype,
bamatypeNames = new List<string>()
{b.bamatypeafdrukNL, b.bamatypeafdrukFR, b.bamatypeafdrukEN}
}).ToList();
但当我调试这个列表时,我看到项目是从位置随机切换的。EN将变为索引0,而NL应为索引0。
字典是最好的用途,但LINQ似乎无法翻译字典,这就是我使用List的原因。
但LINQ似乎不会翻译字典
当然可以:
db.SA_BamaType
.AsEnumerable()
.Select(b => new BamaTypeModel()
{
id = b.p_bamatype,
bamatypeNames = new Dictionary<string, string>
{
{ "NL", b.bamatypeafdrukNL },
{ "FR", b.bamatypeafdrukFR },
{ "EN", b.bamatypeafdrukEN }
}
}).ToList();
var items = db.SA_BamaType
.Select(b =>
{
id = b.p_bamatype,
NL = b.bamatypeafdrukNL,
EN = b.bamatypeafdrukEN,
FR = b.bamatypeafdrukFR
}).ToList();
var models = items.Select(b=>
new BamaTypeModel()
{
id = b.id,
bamatypeNames = new List<string>()
{b.NL, b.FR, b.EN}
}
).ToList();
小提示:new List(){..,..}不是LINQ2SQL可以转换为SQL语句的构造,因此不能在LINQ查询中使用它。如果它对您有效,那么您可能已经将查询转换为对象了(正如您在调用AsEnumerable()时注意到的那样)。
new List(){"A","B"}等价于:
var list = new List<string>();
list.Add("A");
list.Add("B");
因此,它应该保持声明顺序("A"应该在0位置,"B"应该在1位置)。