如何获取列表中字符串值的索引,并将其分配给linq

时间:2016-06-29 04:27:09

标签: linq indexof

我是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)?或者我做错了什么?或者......还有其他简单的方法吗?

1 个答案:

答案 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);