0

このエラーが発生しましたが、それが何であるかわかりません。私は答えを探しましたが、メインに答えることができないか、何かが足りないだけかもしれません。ここに私のコード:

Connection db = new Connection();

        public ActionResult Index()
        {

            ViewBag.query = from input in db.field
                            where input.ID_FIELD == 1
                            select new {
                                type = input.FIELD_TYPE 
                            };


            return View();
        }

そして見る側

 @foreach (var item in ViewBag.query)
        { 
                @item.type//error here: 'object' does not contain a definition for 'type', why???
        }

そして、WHERE句で単純な選択を行うと、問題なく動作します public ActionResult Index() {

            ViewBag.query = from input in db.field
                            where input.ID_FIELD == 1
                            select input.FIELD_TYPE;


            return View();
        }

私の問題は何ですか?私は多くの toturials が同じことをしているようで、今私がやったこのようにうまく機能します: int[] number = { 1, 2, 3, 4, 5 };

            var query = from num in number
                        let x = num + num + num
                        select new {avg = x};

               foreach (var item in query)
            {
                Console.WriteLine(item.avg);

            }

ここではすべて問題ありません。なぜ問題になるのでしょうか??

4

3 に答える 3

3

メソッドから匿名型を返すことはできません。代わりに、新しい型を作成してその型を返します。

例えば:

ViewBag.query = from input in db.field
                            where input.ID_FIELD == 1
                            select new MyType() {
                                someField = input.FIELD_TYPE 
                            };

public class MyType
{
  public int someField {get;set;}//compatible with whatever type FIELD_TYPE is.
}
于 2013-03-29T13:03:47.323 に答える
0

最後の例では、「item.type」を使用していません。それとは別に、System.Objectにはプロパティ「タイプ」が含まれていません。ただし、「GetType()」を使用できます。
参考までにこちらをご覧ください。

于 2013-03-29T13:01:10.323 に答える
0

問題は、ViewBag は ですがdynamic、そこに格納している匿名オブジェクトはそうではないため、コンパイラはそのプロパティに直接アクセスできないことです。クエリ全体ではなく、ViewBag プロパティに値のコレクションを格納するだけです。

Connection db = new Connection();
public ActionResult Index()
{

    ViewBag.types = from input in db.field
                    where input.ID_FIELD == 1
                    select input.FIELD_TYPE;

    return View();
}

その後

@foreach (var type in ViewBag.types)
{ 
    @type
}
于 2013-03-29T13:50:28.180 に答える