动态linq查询迭代列表

时间:2014-11-23 20:27:17

标签: c# linq entity-framework

因此尝试迭代会话密钥,将所有这些值添加到列表中,然后对于每个值,我想将它与数据库表进行比较,如果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)中的值匹配并返回全部作为“产品”列表(产品是一类)

1 个答案:

答案 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。