MVC C#搜索过滤器

时间:2019-02-27 14:47:20

标签: c# asp.net-mvc

我正在尝试从数据库中过滤记录。选中复选框时,复选框值发布控制器。

当我选择“ a”时,它将显示包含“ a”的记录,
但是当我选择“ a,b”时,它显示为“ a-b-a,b”,但我只希望它显示为“ a,b”。

我的控制器:

   public ActionResult GetProducts(List<string> filter)
   {
        List<Product> proc = new List<Product>();

        foreach (var item in filter)
        { 
           var model = db.Product.Where(x => x.tMal.Contains(item)).ToList();
            proc.AddRange(model);
        }
        return View(proc);

我该怎么做?

2 个答案:

答案 0 :(得分:2)

根据@Ezlo的答案,我只是用一些数据对其进行了测试,因此无法在答案中写出此内容。当我运行

class Program
    {
        public static void Main(string[] args)
        {
            var list = GetProducts(new List<string> { "a", "b" });
            foreach (var val in list)
            {
                Console.WriteLine("Result:" + val);
            }

        }

        public static IEnumerable<string> GetProducts(List<string> filter)
        {
            List<Product> proc = new List<Product>();

            IQueryable<Product> query = new List<Product>
            {
                new Product
                {
                    tMal = "a,b",
                },
                new Product
                {
                    tMal = "a",
                },
                new Product
                {
                    tMal = "b",
                }
            }.AsQueryable();

            foreach (var item in filter)
            {
                query = query.Where(x => x.tMal.Contains(item));
            }

            proc.AddRange(query.ToList());
            return proc.Select(s => s.tMal);
        }
    }

    internal class Product
    {
        public string tMal;
    }

这是我得到的结果:

Result:a,b

答案 1 :(得分:1)

在从数据库中检索值之前,您需要将多个Where()与其他Contains()进行链接,然后从数据库中检索值:

public ActionResult GetProducts(List<string> filter)
{
    List<Product> proc = new List<Product>();

    IQueryable<Product> query = db.Product;

    foreach (var item in filter)
        query = query.Where(x => x.tMal.Contains(item));

    proc.AddRange(query.ToList());

    return View(proc);
}