c# - 如何通过实体框架中数据库的一列上的多个值与其他列上的不同值获取数据?
问题描述
我想从具有多个可选值的两个表中搜索数据库中的数据。
[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);
}
我在有记录的情况下得到零记录,如果我发送单个城市值然后获取记录。
那么如何通过多个城市值获取数据呢?
解决方案
当你循环时,你最终会得到循环中最后一个城市的行。您需要在所有城市中使用Any
或contains
在单个位置中,例如:
searchQuery = searchQuery.Where(x => objDetail.City.Contains(x.user.City));
现在它将在搜索中带来与集合中的城市匹配的所有行objDetail.City
推荐阅读
- django - 在不同的应用程序中单击注销按钮时重定向到登录视图
- google-chrome - 如何在谷歌浏览器的开发者工具控制台中创建和保存文件?
- laravel - 在 Laravel Jetstream / Fortify 中将登录用户重定向到个人资料页面(启用 2 因素)?
- ios - 动态集合视图单元格大小调整无法正常工作
- hadoop - 在 HIVE 中创建数据库时权限被拒绝
- excel - VBA:转换为数字
- react-native - 当视频在 expo-video-player 上以 react native 结束时如何提醒某些东西?
- go - 使用多种方式转换十六进制值会导致不同的输出
- flutter - 在 dart/flutter 中使用 [][] 从包含列表的地图索引错误
- python - 我怎样才能让 tkinter 与 time.sleep 一起工作