首页 > 解决方案 > 如何通过实体框架中数据库的一列上的多个值与其他列上的不同值获取数据?

问题描述

我想从具有多个可选值的两个表中搜索数据库中的数据。

[HttpPost]
public ActionResult GetAll(Details objDetail)
{

首先,我正在创建AsQueryable用于查询的对象。

var searchQuery = (from acc in AppDB.tblAccount
                   join user in AppDB.tblUser on acc.uID equals user.uID
                   select new { acc, user }).AsQueryable();

然后我将条件AsQueryable一一应用于这个对象。

if (objDetail.Type != null)
    searchQuery = searchQuery.Where(x => x.acc.Type == objDetail.Type);

if (objDetail.Category!= null)
    searchQuery = searchQuery.Where(x => x.acc.Category== objDetail.Category);

if (objDetail.City.Length != 0)
    for (int i = 0; i <= objDetail.City.Length - 1; i++)
    {
        string singleCity = objDetail.City[i];
        searchQuery = searchQuery.Where(x => x.user.City.Contains(singleCity));
    }

if (objDetail.Place!= null)
    searchQuery = searchQuery.Where(x => x.user.Place== objDetail.Place);

if (objDetail.Price != null)
    searchQuery = searchQuery.Where(x => x.acc.Price == objDetail.Price);

searchQuery = searchQuery.Where(x => x.user.IsActive == true && 
                                     x.user.IsDelete == false &&
                                     x.acc.IsActive == true && 
                                     x.acc.IsDelete == false);

然后最后我试图searchQuery通过选择下面的列来将数据从对象获取到其他对象

var searchedAccList = (from result in searchQuery
                       select new
                              {
                                 Id = result.acc.aID,
                                 UserId = result.user.uID,
                                 Name = result.user.Name,
                                 AccountType = result.acc.Type,
                                 City = result.user.City,
                              }).ToList();
    return Json(searchedAccList, JsonRequestBehavior.AllowGet);
}

我在有记录的情况下得到零记录,如果我发送单个城市值然后获取记录。

那么如何通过多个城市值获取数据呢?

标签: c#asp.net-mvcentity-framework

解决方案


当你循环时,你最终会得到循环中最后一个城市的行。您需要在所有城市中使用Anycontains在单个位置中,例如:

searchQuery = searchQuery.Where(x => objDetail.City.Contains(x.user.City));

现在它将在搜索中带来与集合中的城市匹配的所有行objDetail.City


推荐阅读