如何通过实体框架中数据库中的一列上的多个值与其他列上的不同值来获取数据?

abb*_*med 5 c# asp.net-mvc entity-framework

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

[HttpPost]
public ActionResult GetAll(Details objDetail)
{
Run Code Online (Sandbox Code Playgroud)

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

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

然后我对这个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);
Run Code Online (Sandbox Code Playgroud)

然后最后我试图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);
}
Run Code Online (Sandbox Code Playgroud)

我在有记录的地方得到零记录,如果我发送单个城市值,则获取记录。

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

Ehs*_*jad 1

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

searchQuery = searchQuery.Where(x => objDetail.City.Contains(x.user.City));
Run Code Online (Sandbox Code Playgroud)

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