因此尝试迭代会话密钥,将所有这些值添加到列表中,然后对于每个值,我想将它与数据库表进行比较,如果productid = id from value,那么我希望它返回在查询中。
List<product> products = new List<product>();
if (Session != null)
{
List<int> ids = Session["myIds"] != null ? (List<int>)Session["myIds"] : null;
if (ids != null)
{
//var grabProducts = db.products.Where(p => p.product_id == ids[0]);
foreach (int id in ids)
{
//ListBox1.Items.Add(String.Format("select * from customer where id={0}", id));
//int newd = id;
prodIds.Add(id);
}
for (int i = 0; i < prodIds.Count; i++)
{
int newd = prodIds[i];
products = db.products.Where(p => p.product_id == newd).ToList();
}
var grabProducts = products;
return View(grabProducts.ToList().ToPagedList(page ?? 1, 6));
}
}
'db'是我的EF模型的一个实例,prodIds是一个声明为全局的List()。
基本上这只是让我从列表中得到的最后一个产品,这是有道理的,因为我不是对“产品”进行计数,我只是每次都重新声明它。我怎样才能做到这一点?
我尝试了一个products.Add(db.products.Where(p => p.product_id == newd)).ToList();
并没有占上风,我尝试使用常见的C#语法来对products += db.products.Where(p => p.product_id == newd).ToList();
进行广泛调整。
同样,我试图遍历包含id值的整数列表,然后我想做一个linq查询,看看我的数据库中的哪些值与id值(product_id = id value)中的值匹配并返回全部作为“产品”列表(产品是一类)
答案 0 :(得分:0)
好的,我找到了答案。为此,您需要使用'Contains'运算符。如下:
var test = prodIds.Cast<int>().ToList();
var grabProducts = db.products.OrderBy(p => p.product_id).Where(p => test.Contains(p.product_id));
只是让其他人遇到这个问题,只需声明一个var来转换你需要的任何数据类型。然后进行查询,在.Where
选择中,您可以执行我所做的操作,并添加一个查询,如果某行包含列表中的任何值,则返回该查询。在Where Where之前你需要一个OrderBy。