【问题标题】:How to return linq query into single object如何将 linq 查询返回到单个对象
【发布时间】:2011-03-16 23:08:28
【问题描述】:

我的控制器中有这段代码:

 public ActionResult Details(int id)
    {
        using (var db = new MatchGamingEntities())
        {
            var MyMatches = from m in db.Matches
                            join n in db.MatchTypes on m.MatchTypeId equals n.MatchTypeId
                            where m.MatchId == id
                            select new MatchesViewModel
                            {
                                MatchType = n.MatchTypeName,
                                MatchId = m.MatchId,
                                MatchName = m.MatchTitle,
                                MatchDescription = m.MatchDescription,
                                Wager = m.Wager
                            };
            ViewBag.MyMatches = MyMatches.ToList();



            return View(MyMatches.ToList());
        }

    }

我希望能够使这个查询只返回一个结果,并且我可以使用 MyMatches 作为 MatchesViewModel 对象,因此我不必使用 ToList() 功能,从而摆脱视图页面上的 IEnumberable @987654323 @所以我可以把它变成这样:@model MatchGaming.Models.MatchesViewModel

【问题讨论】:

  • 您可能正在寻找 .First()、.FirstOrDefault() 或 Single();而不是 .ToList()

标签: c# asp.net linq asp.net-mvc-3


【解决方案1】:

您可以调用适当命名的扩展方法Enumerable.Single()

以下是一些其他相关方法以及它们之间的差异,具体取决于您要查询的集合中有多少元素:

无元素 多于一个元素 First Throws exception 第一个元素返回 FirstOrDefault default(T) 返回的第一个元素 单次抛出异常 抛出异常 SingleOrDefault default(T) 抛出异常

【讨论】:

    【解决方案2】:

    .Single() 将返回一个对象。如果有多个,或者没有,它会抛出异常。

    .First() 只会给你第一个,只在没有项目时抛出异常。

    .FirstOrDefault() 与 .First() 相同,但在没有项目时给你 NULL。

    【讨论】:

      【解决方案3】:

      我通常使用 .UniqueResult()。它返回单个结果或空引用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多