1

一个非常简单的问题,但我找不到答案。

假设我们有这个:

    [HttpPost]
    public ActionResult Comparison(int id)
    {
        string makeLst = new List<String>();

        var makeQry = from m in db.Car
                      where m.ID == id
                      select m.Make;

        makeLst = makeQry.AddRange(makeQry);

        ViewBag.make = new List<String>(makeLst);
        return View();
    }

“makeQry”结果视图将只是一个单词(字符串)。所以我不想为此使用List,而只使用String。使用“.ToString()”将不起作用,因为“makeQry.ToString()”将是查询本身而不是它的结果。而且我检查了没有诸如 makeQry.Result 之类的方法来获取查询的结果。

谢谢你。

4

3 回答 3

3

您可以使用First()orFirstOrDefault()获得单一结果:

ViewBag.make = makeQry.FirstOrDefault();

(不同的是,First如果集合为空,则抛出异常,而FirstOrDefault在这种情况下只返回空值。)

于 2012-11-23T04:01:42.610 回答
3

详细信息:如果您确定总会有一个匹配的 ID 值,那么下面应该可以完成这项工作(未经测试)

[HttpPost]
public ActionResult Comparison(int id)
{
   ViewBag.make = db.Car.FirstOrDefault(x => x.ID == id).Make;

   return View();
}

或者,如果您更喜欢保留 linq 语法,那么您是如何做到的

[HttpPost]
public ActionResult Comparison(int id)
{
   ViewBag.make = (from m in db.Car
                   where m.ID == id
                   select m.Make).FirstOrDefault();

   return View();
}
于 2012-11-23T04:07:24.617 回答
0
[HttpPost]
public ActionResult Comparison(int id)
{
    var makeQry = from m in db.Car
                  where m.ID == id
                  select m.Make;
    //As soon as the result is guaranteed to contain only one object 
    ViewBag.make = makeQry.SingleOrDefault();
    return View();
}

它使用Enumerable.SingleOrDefault Method (IEnumerable),该方法返回输入序列的单个元素,如果没有元素,则返回 null。如果序列包含多个元素,它将引发异常。

于 2012-11-23T04:02:51.797 回答