LINQ列表初始化程序不保持初始化顺序

时间:2012-01-23 00:45:22

标签: c# linq list

我有以下问题: 我从数据库中选择数据,对于表中的每个项目,我创建了一个模型。 该模型包含一个列表,其中包含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的原因。

2 个答案:

答案 0 :(得分:3)

  

但似乎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();

答案 1 :(得分:0)

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()时注意到的那样)。
新的List(){“A”,“B”}相当于:

var list = new List<string>();
list.Add("A");
list.Add("B");

所以它应该保持声明顺序(“A”应该在位置0而“B”应该在位置1)。