比较数据库值时的显式转换

时间:2012-08-16 12:16:34

标签: c# asp.net-mvc linq

我正在尝试通过其ID在我的数据库中选择一行,然后选择“Position”值高于ID选择的行的所有行,如下所示:

int id = Convert.ToInt32(Request.QueryString["id"]);
MyDataContext d = new MyDataContext
Item itemID = d.Items.Single(row => row.ID == id);
Item itemPos = d.Items.Select(row => row.Position > itemID.Position);

底线是说存在显式转换,但我似乎无法解决它

到目前为止已经阅读了答案,代码现在看起来像这样:

int id = Convert.ToInt32(Request.QueryString["id"]);
MyDataContext d = new MyDataContext
Item itemID = d.Items.Single(row => row.ID == id);
var itemPos = d.Items.Where(row => row.Position > itemID.Position);

但是当我尝试编辑所选行的位置时,似乎我做错了:

itemPos.Position = itemPos.Position - 1;

我原本期望该行将当前位置减少1 我还是新手

2 个答案:

答案 0 :(得分:1)

您的select语句将返回IEnumerable<Item>,而您指定的类型是单Item。你可以尝试以下方法。

 var itemPos = d.Items.Where(row => row.Position > itemID.Position);

使用var作为隐式类型,或使用IEnumerable<Item>作为显式类型,因为您根据条件选择可以使用Where子句而不是Select

答案 1 :(得分:0)

IEnumerable<Item> itemPos = d.Items.Select(row => row.Position > itemID.Position);

但最好的方法是使用var