我正在尝试从数据库中过滤记录。选中复选框时,复选框值发布控制器。
当我选择“ 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);
我该怎么做?
答案 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);
}