C# 使用实体模型将ArrayList绑定到Repeater控件

C# 使用实体模型将ArrayList绑定到Repeater控件,c#,asp.net,arraylist,session-variables,repeater,C#,Asp.net,Arraylist,Session Variables,Repeater,我正在创建一个购物车。用户将转到产品的各个页面并单击“添加到购物车”按钮。单击该按钮时,ProductId存储在会话[“购物车”]中的数组列表中。当他们转到Cart.aspx时,中继器将显示数组列表中的所有项目。我不知道如何正确地将数组列表与实体模型一起使用 以下是迄今为止我对代码的了解: if(会话[“购物车”]!=null) { 使用(ProjectEntities myEntities=new ProjectEntities()) { ArrayList alProduct=新的Array

我正在创建一个购物车。用户将转到产品的各个页面并单击“添加到购物车”按钮。单击该按钮时,ProductId存储在会话[“购物车”]中的数组列表中。当他们转到Cart.aspx时,中继器将显示数组列表中的所有项目。我不知道如何正确地将数组列表与实体模型一起使用

以下是迄今为止我对代码的了解:

if(会话[“购物车”]!=null)
{
使用(ProjectEntities myEntities=new ProjectEntities())
{
ArrayList alProduct=新的ArrayList();
alProduct=(ArrayList)会话[“购物车”];
var product=(来自myEntities.Products中的p
其中p.ProductId==Convert.ToInt32(alProduct)
选择“新建”{p.ProductName});
Repeater1.DataSource=product.ToList();
Repeater1.DataBind();
}
}
以下是Cart.aspx的标记



代码的第一个问题是:
p.ProductId==Convert.ToInt32(alProduct)
。由于
alProduct
是一个ArrayList,因此它永远不会转换为
整数
,并将引发运行时异常。像这样更改查询并使用
Contains
:-

var product = (from p in myEntities.Products
               where alProduct.Contains(p.ProductId)
               select p.ProductName).ToList();
由于您只选择一个项目,即
ProductName
,因此无需投影匿名类型


另外,在从会话中分配值之前,不需要实例化ArrayList,尽管在运行
产品
查询之前应该检查null。我建议您使用ArrayList的通用版本,即
List
而不是ArrayList。

您可以尝试使用这个var product=(从myEntities.Products中的p开始,其中p.ProductId==Convert.ToInt32(alProduct)选择新的{p.ProductName});Repeater1.DataSource=产品;Repeater1.DataBind();我试过了,但没用。它给了我这个错误消息“LINQ to Entities无法识别方法'Int32 ToInt32(System.Object)'方法,并且该方法无法转换为存储表达式。”@Francis Saultry创建一个新的arrayList并将该新arrayList绑定为中继器的数据源。ArrayList productList=新的ArrayList(product.ToList());为什么要使用
ArrayList
?他们十年前就这样了。为什么不使用
List
?这是我在课堂上学到的,但我会研究List@enigmativity我使用的是ArrayList,因为我只是从课堂上学到了这一点,但我会研究其他替代方法。我在上面键入了,但最后一行“Repeater1.DataBind();”有问题,它给出了错误消息:“不支持直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery、DbRawSqlQuery)的数据。”@RahulSingh@RonT-好的,我忘了您使用的是实体框架,您可以应用
ToList()
在末尾将其转换为列表。检查我的更新。我仍在使用ArrayList,如果我仍在使用它,会不会影响它,因为我还不太确定如何使用列表。我输入了更新的解决方案,这次错误出现在“var product=(myEntities.Products中的p)中,错误消息是:“LINQ to Entities无法识别方法‘Boolean Contains(System.Object)’方法,并且此方法无法转换为存储表达式。”@RahulSingh@RonT-好的,这意味着您使用的是实体框架版本<4。您可以更新版本吗?否则,您必须使用此答案中指定的手动表达式进行操作-我知道,System.Data.entity.Design的版本是=4.0.0.0。我将找出如何更新版本。感谢所有帮助远@Rahul Singh