如果 where 包含空字符串,LINQ 应该 return 没有记录
LINQ should return no records if where contains empty string
我正在尝试获取汽车描述过滤器文本所在的汽车记录。但如果过滤文本为空,我不应该 return 任何记录。以下代码有效,但是否有更好的方法来避免 cars.where(c => false)
public JsonResult GetCars(string cFilter)
{
IQueryable<Cars> cars = CarService.GetCars();
if (!string.IsNullOrEmpty(cFilter))
cars = cars.Where(c => c.carDescr.Contains(cFilter));
else
cars = cars.Where(c => false);
var carInfo = (from c in cars
select (new { id = c.CarID, description = c.CarID + "-" + c.carDescr })).ToList();
return Json(carInfo, JsonRequestBehavior.AllowGet);
}
我不知道我错过了什么,但你只为 cFilter
设置了 null
是 null
public JsonResult GetCars(string cFilter)
{
IQueryable<Cars> cars = CarService.GetCars();
if (!string.IsNullOrEmpty(cFilter))
{cars = cars.Where(c => c.carDescr.Contains(cFilter));
var carInfo = (from c in cars
select (new { id = c.CarID, description = c.CarID + "-" + c.carDescr })).ToList();
return Json(carInfo, JsonRequestBehavior.AllowGet);
}
else
{
return Json("", JsonRequestBehavior.AllowGet);
}
}
您可以完全跳过 CarService 的使用。
public JsonResult GetCars(string cFilter)
{
IQueryable<Cars> cars;
if (!string.IsNullOrEmpty(cFilter))
cars = CarService.GetCars().Where(c => c.carDescr.Contains(cFilter));
else
cars = Enumerable.Empty<Cars>().AsQueryable();
var carInfo = (from c in cars
select (new { id = c.CarID, description = c.CarID + "-" + c.carDescr })).ToList();
return Json(carInfo, JsonRequestBehavior.AllowGet);
}
您可以缓存由 Enumreable.Empty<Cars>()
生成的 EnumerableQuery<Cars>
或者实际上只是 return 一个 JsonResult
用于任何情况下的空数组,因为任何空 json 数组是一个空 json 数组:
public JsonResult GetCars(string cFilter)
{
if (!string.IsNullOrEmpty(cFilter))
return Json(Enumerable.Empty<object>(), JsonRequestBehavior.AllowGet);
var carInfo = (from c in CarService.GetCars()
where c.carDescr.Contains(cFilter)
select (new { id = c.CarID, description = c.CarID + "-" + c.carDescr })).ToList();
return Json(carInfo, JsonRequestBehavior.AllowGet);
}
我会选择后者,但值得一提的是前者是两者中唯一适用的情况。
找到另一个解决方案。在 where 子句中添加了 cFilter empty 或 null 检查,它起作用了。
cars = cars.Where(c => c.carDescr.Contains(cFilter) && !string.IsNullOrEmpty(cFilter));
完成以下功能。
public JsonResult GetCars(string cFilter)
{
IQueryable<Cars> cars = CarService.GetCars();
cars = cars.Where(c => c.carDescr.Contains(cFilter) && !string.IsNullOrEmpty(cFilter));
var carInfo = (from c in cars
select (new { id = c.CarID, description = c.CarID + "-" + c.carDescr })).ToList();
return Json(carInfo, JsonRequestBehavior.AllowGet);
}
我正在尝试获取汽车描述过滤器文本所在的汽车记录。但如果过滤文本为空,我不应该 return 任何记录。以下代码有效,但是否有更好的方法来避免 cars.where(c => false)
public JsonResult GetCars(string cFilter)
{
IQueryable<Cars> cars = CarService.GetCars();
if (!string.IsNullOrEmpty(cFilter))
cars = cars.Where(c => c.carDescr.Contains(cFilter));
else
cars = cars.Where(c => false);
var carInfo = (from c in cars
select (new { id = c.CarID, description = c.CarID + "-" + c.carDescr })).ToList();
return Json(carInfo, JsonRequestBehavior.AllowGet);
}
我不知道我错过了什么,但你只为 cFilter
设置了 null
是 null
public JsonResult GetCars(string cFilter)
{
IQueryable<Cars> cars = CarService.GetCars();
if (!string.IsNullOrEmpty(cFilter))
{cars = cars.Where(c => c.carDescr.Contains(cFilter));
var carInfo = (from c in cars
select (new { id = c.CarID, description = c.CarID + "-" + c.carDescr })).ToList();
return Json(carInfo, JsonRequestBehavior.AllowGet);
}
else
{
return Json("", JsonRequestBehavior.AllowGet);
}
}
您可以完全跳过 CarService 的使用。
public JsonResult GetCars(string cFilter)
{
IQueryable<Cars> cars;
if (!string.IsNullOrEmpty(cFilter))
cars = CarService.GetCars().Where(c => c.carDescr.Contains(cFilter));
else
cars = Enumerable.Empty<Cars>().AsQueryable();
var carInfo = (from c in cars
select (new { id = c.CarID, description = c.CarID + "-" + c.carDescr })).ToList();
return Json(carInfo, JsonRequestBehavior.AllowGet);
}
您可以缓存由 Enumreable.Empty<Cars>()
生成的 EnumerableQuery<Cars>
或者实际上只是 return 一个 JsonResult
用于任何情况下的空数组,因为任何空 json 数组是一个空 json 数组:
public JsonResult GetCars(string cFilter)
{
if (!string.IsNullOrEmpty(cFilter))
return Json(Enumerable.Empty<object>(), JsonRequestBehavior.AllowGet);
var carInfo = (from c in CarService.GetCars()
where c.carDescr.Contains(cFilter)
select (new { id = c.CarID, description = c.CarID + "-" + c.carDescr })).ToList();
return Json(carInfo, JsonRequestBehavior.AllowGet);
}
我会选择后者,但值得一提的是前者是两者中唯一适用的情况。
找到另一个解决方案。在 where 子句中添加了 cFilter empty 或 null 检查,它起作用了。
cars = cars.Where(c => c.carDescr.Contains(cFilter) && !string.IsNullOrEmpty(cFilter));
完成以下功能。
public JsonResult GetCars(string cFilter)
{
IQueryable<Cars> cars = CarService.GetCars();
cars = cars.Where(c => c.carDescr.Contains(cFilter) && !string.IsNullOrEmpty(cFilter));
var carInfo = (from c in cars
select (new { id = c.CarID, description = c.CarID + "-" + c.carDescr })).ToList();
return Json(carInfo, JsonRequestBehavior.AllowGet);
}