如何获取列表中字符串值的索引,并将其分配给linq中的字段
How to get the index of a string value in a list, and assign it to a field in linq
我是 linq 的新手,我写的 linq 是这样的:
temp = mdl.T57.Select(v => new TestMDTDataSource()
{
StatYear = v.StatYear,
StatM = v.StatM,
StatMonth = v.StatMonth,
TransportMode = null,
TradeType = v.TradeType,
Country = v.Country,
ItemCode = null,
ItemDesc = null,
ItemUnit = null,
TradeValue = v.TradeValue,
TradeQty = null,
YtoY = v.YtoY,
TopNIndex = (Nullable<int>)TopNCountryList.IndexOf(v.Country + 1)
});
但是我得到了"LINQ to Entities does not recognize the method 'Int32 IndexOf(System.String)' method, and this method cannot be translated into a store expression"
TopNCountryList 变量是一个字符串列表。
我先select2014年12月的数据,按TradeValue降序排列。所以我得到了一个国家列表,那就是 TopNCountryList。
我最终的 return 值是 temp.ToList() ,这是一个自定义对象的列表(所有属性都在上面的 linq 中列出,这个对象将被其他函数用于不同的查询结果。这就是为什么我将 TopNIndex 设置为 Nullable。)。
如果我将 "TopNIndex = (Nullable)TopNCountryList.IndexOf(v.Country + 1)" 更改为 "TopNIndex = (Nullable) 1" ,我可以得到结果
我想根据2014年12月的TradeValue订单为所有数据(从2014年1月到2014年12月)的TopNIndex分配一个整数值
linq 是否支持 IndexOf(System.String)?还是我做错了什么?或者……还有其他简单的方法吗?
如果您运行针对数据库进行此操作,您将收到该错误。一种简单的方法是在执行查询时不填充 属性。但是执行后,你可以运行它在内存中。
temp = mdl.T57.Select(v => new TestMDTDataSource()
{
StatYear = v.StatYear,
StatM = v.StatM,
StatMonth = v.StatMonth,
TransportMode = null,
TradeType = v.TradeType,
Country = v.Country,
ItemCode = null,
ItemDesc = null,
ItemUnit = null,
TradeValue = v.TradeValue,
TradeQty = null,
YtoY = v.YtoY
}).ToList();
temp.ForEach(v=>v.TopNIndex = (Nullable<int>)TopNCountryList.IndexOf(v.Country)+1);
我是 linq 的新手,我写的 linq 是这样的:
temp = mdl.T57.Select(v => new TestMDTDataSource()
{
StatYear = v.StatYear,
StatM = v.StatM,
StatMonth = v.StatMonth,
TransportMode = null,
TradeType = v.TradeType,
Country = v.Country,
ItemCode = null,
ItemDesc = null,
ItemUnit = null,
TradeValue = v.TradeValue,
TradeQty = null,
YtoY = v.YtoY,
TopNIndex = (Nullable<int>)TopNCountryList.IndexOf(v.Country + 1)
});
但是我得到了"LINQ to Entities does not recognize the method 'Int32 IndexOf(System.String)' method, and this method cannot be translated into a store expression"
TopNCountryList 变量是一个字符串列表。 我先select2014年12月的数据,按TradeValue降序排列。所以我得到了一个国家列表,那就是 TopNCountryList。 我最终的 return 值是 temp.ToList() ,这是一个自定义对象的列表(所有属性都在上面的 linq 中列出,这个对象将被其他函数用于不同的查询结果。这就是为什么我将 TopNIndex 设置为 Nullable。)。 如果我将 "TopNIndex = (Nullable)TopNCountryList.IndexOf(v.Country + 1)" 更改为 "TopNIndex = (Nullable) 1" ,我可以得到结果 我想根据2014年12月的TradeValue订单为所有数据(从2014年1月到2014年12月)的TopNIndex分配一个整数值 linq 是否支持 IndexOf(System.String)?还是我做错了什么?或者……还有其他简单的方法吗?
如果您运行针对数据库进行此操作,您将收到该错误。一种简单的方法是在执行查询时不填充 属性。但是执行后,你可以运行它在内存中。
temp = mdl.T57.Select(v => new TestMDTDataSource()
{
StatYear = v.StatYear,
StatM = v.StatM,
StatMonth = v.StatMonth,
TransportMode = null,
TradeType = v.TradeType,
Country = v.Country,
ItemCode = null,
ItemDesc = null,
ItemUnit = null,
TradeValue = v.TradeValue,
TradeQty = null,
YtoY = v.YtoY
}).ToList();
temp.ForEach(v=>v.TopNIndex = (Nullable<int>)TopNCountryList.IndexOf(v.Country)+1);