簡體   English   中英

如何在不使用 List 的情況下將 Linq 查詢的值傳遞給普通字符串?

[英]How to pass the value of an Linq Query to a normal String without using List?

一個非常簡單的問題,但我找不到答案。

假設我們有這個:

    [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 之類的方法來獲取查詢的結果。

謝謝你。

您可以使用First()FirstOrDefault()來獲得單個結果:

ViewBag.make = makeQry.FirstOrDefault();

(不同之處在於,如果集合為空,則First拋出異常,而FirstOrDefault在這種情況下僅返回空值。)

詳細信息:如果您確定總是有一個匹配的 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();
}
[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 方法 (IEnumerable) ,如果沒有元素,則返回輸入序列的單個元素或 null。 如果序列包含多個元素,它將拋出異常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM