2

大家好,我在实体框架中有这样的代码(我想同时更改许多项目我不知道我们是否可以使用这样的循环,但它会引发这样的异常:

LINQ to Entities 无法识别方法“Int32 get_Item(Int32)”方法,并且该方法无法转换为存储表达式。

代码:

        try
        {
            for (int j = 0; j < ids.Count; j++)
            {
                using (OzgorenEntities2 context = new OzgorenEntities2())
                {
                        Stock st = context.Stocks.First(i => i.id == ids[j]);
                        st.stockAmount =  amounts[j];
                        context.SaveChanges();
                }
            }
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }

老实说,我搜索并发现转换在服务器端不起作用,但我没有在那里转换它可能对我有什么解决方案?

谢谢

4

2 回答 2

5

尝试在给定索引处为 ids 值引入一个变量

            using (OzgorenEntities2 context = new OzgorenEntities2())
            {
                    var id = ids[j];
                    Stock st = context.Stocks.First(i => i.id == id);
                    st.stockAmount =  amounts[j];
                    context.SaveChanges();
            }
于 2013-05-08T15:37:37.970 回答
2

您应该将中间变量添加到存储值ids[j]

    try
    {
        for (int j = 0; j < ids.Count; j++)
        {
            var tempId = ids[j];
            using (OzgorenEntities2 context = new OzgorenEntities2())
            {
                    Stock st = context.Stocks.First(i => i.id == tempId);
                    st.stockAmount =  amounts[j];
                    context.SaveChanges();
            }
        }
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }

这是由于 IQueriable 表达式的性质。LINQ to Entities 不知道如何将表达式i => i.id == ids[j]转换为 SQL 语句。

于 2013-05-08T15:38:48.150 回答