嗨,这是我的第一个问题,如果它真的很基本,那么道歉 - 我对编程很新! 在MVC中使用c#我试图从entitymodel上下文中选择具有Date属性的对象。然后,此日期选择相关的Weight对象,依此类推以获取“Set”对象列表。
代码可以正常工作并完成我想要的但是想要一些关于如何使这些代码更简洁的一般指导。这是代码:
public ActionResult showDiary(string datein)
{
LocalTestEntities1 dblists = new LocalTestEntities1();
DateTime date = Convert.ToDateTime(datein);
IEnumerable<ExerciseDiary> diary = from o in dblists.ExerciseDiaries where o.Date == date select o;
var mydiary = diary.ToList();
ExerciseDiary thediary = mydiary[0];
IQueryable<Weight> weights = from o in dblists.Weights where o.DiaryID == thediary.ID select o;
var selectedWeight = weights.ToList();
Weight weight = selectedWeight[0];
IEnumerable<Set> sets = from x in dblists.Sets where x.WeightId == weight.WeightID select x;
return View(sets);
}
我似乎在这里采取了太多步骤。我知道我只是将一个物体归还日记。有没有办法从dblists获取此对象而不发送到IEnumerable?
答案 0 :(得分:1)
使用First()
方法可以使事情更简洁:
public ActionResult showDiary(string datein)
{
using (LocalTestEntities1 dblists = new LocalTestEntities1())
{
DateTime date = Convert.ToDateTime(datein);
var thediary = (from o in dblists.ExerciseDiaries
where o.Date == date
select o).First();
var weight = (from o in dblists.Weights
where o.DiaryID == thediary.ID
select o).First();
var sets = (from x in dblists.Sets
where x.WeightId == weight.WeightID
select x).ToList();
}
return View(sets);
}
您还应该在using
块中包装LINQ to Entities数据访问权限,以便妥善处理。
答案 1 :(得分:0)
总有很多方法可以做,但是......我认为最简单的方法是使用First()
因为你总是只是抓住列表中的第一个结果。
使其变得更清晰的另一种方法是将LINQ语句放在多行上,就像我为sets
所做的那样。
您也可以使用var
,有些人喜欢和其他人不要让编译器推断出类型。我在下面的sets
做了这个。当您使用IEnumerable
和泛型声明进行大量声明时,我觉得它会稍微清理一下代码。
public ActionResult showDiary(string datein)
{
LocalTestEntities1 dblists = new LocalTestEntities1();
DateTime date = Convert.ToDateTime(datein);
ExerciseDiary thediary = dblists.ExerciseDiaries.First(o => o.Date == date);
Weight weight = dblists.Weights.First(o.DiaryID == thediary.ID);
var sets = from x in dblists.Sets
where x.WeightId == weight.WeightID
select x;
return View(sets);
}
IMO这比你上面的答案更容易阅读。
答案 2 :(得分:0)
小心使用First(),因为如果没有记录,它将抛出异常。
答案 3 :(得分:0)
public ActionResult showDiary(string datein)
{
using( var dblists = new LocalTestEntities1())
{
var date = Convert.ToDateTime(datein);
var thediary = dblists.ExerciseDiaries.First(o => o.Date == date);
var weight = dblists.Weights.First(o => o.DiaryID ==thediary.ID);
var sets = dblists.Sets.Where(x => x.WeightId == weight.WeightID).AsEnumerable();
return View(sets);
}
}
警告:如果有可能数据不会一直存在。请改用FirstOrDefault
并检查空值。