我是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无法识别方法'Int32 IndexOf(System.String)'方法,并且此方法无法转换为商店表达式”
TopNCountryList变量是一个字符串列表。 我首先在2014年12月选择数据,然后按照TradeValue的降序排序。所以我得到了一个国家列表,那就是TopNCountryList。 我的最终返回值是temp.ToList(),它是自定义对象的列表(所有属性都在上面的linq中列出,并且该对象将被其他函数用于不同的查询结果。这就是我将TopNIndex设置为可为空的原因)。 如果我将“TopNIndex =(Nullable)TopNCountryList.IndexOf(v.Country + 1)”改为“TopNIndex =(Nullable)1”,我可以得到结果 我想根据2014年12月的TradeValue订单为所有数据(从2014年1月到2014年12月)为TopNIndex分配一个整数值 linq是否支持IndexOf(System.String)?或者我做错了什么?或者......还有其他简单的方法吗?
答案 0 :(得分:0)
如果您针对数据库运行此操作,则会收到该错误。一种简单的方法是在您执行查询时不填充该属性。但执行后,您可以在内存中运行它。
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);