我是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到实体不识别方法'Int32 IndexOf(System.String)'方法,并且此方法不能翻译成存储表达式"
TopNCountryList变量是一个字符串列表。首先选取2014年12月的数据,按TradeValue从小到大排序。我有一个国家列表,这是TopNCountryList。我最后的返回值是temp.ToList(),它是一个自定义对象的列表(所有属性都在上面的linq中列出,这个对象将被其他函数用于不同的查询结果)。这就是为什么我将TopNIndex设置为可空的原因。)我可以得到的结果,如果我改变"TopNIndex = (Nullable)TopNCountryList.IndexOf(v。"国家+ 1"到"TopNIndex = (Nullable) 1"我想按照2014年12月对所有数据(从2014年1月到2014年12月)的TradeValue顺序,给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);