2012-11-23 51 views
1

一個非常簡單的問題,但我找不到答案。如何在不使用List的情況下將Linq Query的值傳遞給普通字符串?

比方說,我們有這樣的:

[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或其他東西來獲得查詢的結果。

謝謝。

+1

http://stackoverflow.com/questions/12477422/how-to-use-returned-linq-variable/12477454#12477454 – Habib

回答

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

您可以使用First()FirstOrDefault()得到一個結果:(不同的是,First拋出一個異常,如果集合爲空,而FirstOrDefault只返回在這種情況下空值)

ViewBag.make = makeQry.FirstOrDefault(); 

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),如果沒有元件,其返回輸入序列的或單個元件空。如果序列包含多個元素,它會拋出一個異常。

相關問題