0

嗨,这是我的第一个问题,如果它真的很基本,我很抱歉 - 我对编程很陌生!!!在 MVC 中使用 c# 我试图从 entitymodel 上下文中选择具有 Date 属性的对象。这个日期然后选择相关的重量对象等等来获取我的“设置”对象列表。

该代码可以正常工作并且可以执行我想要的操作,但想要一些有关如何使此代码更简洁的一般指导。这是代码:

    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?

4

4 回答 4

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);
}

您还应该将您的 LINQ to Entities 数据访问包装在一个using块中,以便正确处理它。

于 2012-07-06T22:16:15.410 回答
0

使用 First() 时要小心,因为如果没有记录,它会抛出异常。

于 2012-07-06T22:20:40.963 回答
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 这比您在上面的答案中更容易阅读。

于 2012-07-06T22:14:44.857 回答
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并检查空值。

于 2012-07-12T09:25:47.563 回答