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