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」結果ビューは、1つの単語(文字列)になります。そのため、これにはListを使用せず、Stringを使用したいと思いました。「makeQry.ToString()」は結果ではなくクエリ自体になるため、「。ToString()」の使用は機能しません。そして、たとえばmakeQry.ResultなどのメソッドやQueryの結果を取得するものがないことを確認しました。

ありがとうございました。

4

3 に答える 3

3

First()またはを使用FirstOrDefault()して、単一の結果を取得できます。

ViewBag.make = makeQry.FirstOrDefault();

(違いはFirst、コレクションが空の場合は例外をスローするのに対しFirstOrDefault、その場合はnull値を返すだけです。)

于 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メソッド(IEnumerable)を使用します。これは、入力シーケンスの単一の要素を返すか、要素がない場合はnullを返します。シーケンスに複数の要素が含まれている場合は、例外がスローされます。

于 2012-11-23T04:02:51.797 に答える