我正在努力解决问题。我有一个字符串,其中包含以下格式的日期范围" dd.MM.yyyy - dd.MM.yyyy"。
var datest = shippeddaterange.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
var startDate = DateTime.Parse(datest[0]);
var endDate = DateTime.Parse(datest[1]);
现在我想将它拆分为2个变量,所以我可以使用我的Lambda Query,它可以正常工作。我的2个新变量应命名为startDate
和endDate
。
data.Container = db.Container
.Where(a => a.ShippedDate >= startDate && a.ShippedDate <= endDate)
.ToList();
如果我编译应用程序,它会给出错误,即数组值超出索引范围
答案 0 :(得分:3)
你需要做一些防御性编码。不要假设金发姑娘的情况,因为你将进行一次粗鲁的觉醒。如果输入不好,那么你有可能不会得到2个项目。
public PartialViewResult SearchData(shippeddaterange) {
data = new ContentViewModel();
using (var db = new PLSDb()) {
var datest = shippeddaterange.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
if(datest.Length == 2) {
var format = "dd.MM.yyyy";
var provider = CultureInfo.InvariantCulture;
var startDate = DateTime.ParseExact(datest[0].Trim(), format, provider);
var endDate = DateTime.ParseExact(datest[1].Trim(), format, provider);
data.Container = db.Container
.Where(a => a.ShippedDate >= startDate && a.ShippedDate <= endDate)
.ToList();
}
}
return PartialView(data);
}
答案 1 :(得分:2)
这里的效果非常好。我将写入方法public ActionResult Index(),在过滤器开始运行之前应该过滤数据。谢谢你的帮助!
public PartialViewResult SearchData(string shippeddaterange)
{
using (var db = new PCSDb())
{
var datest = shippeddaterange.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
if (datest.Length == 2)
{
var format = "dd.MM.yyyy";
var provider = CultureInfo.InvariantCulture;
var startDate = DateTime.ParseExact(datest[0].Trim(), format, provider);
var endDate = DateTime.ParseExact(datest[1].Trim(), format, provider);
var data = new ContentViewModel();
data.Container = db.Container.Where(a => a.ShippedDate >= startDate && a.ShippedDate <= endDate).ToList();
return PartialView(data);
}
else
{
return PartialView("NameOfANewView");
}
}
}