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

我的问题可能是什么?我似乎有很多教程都在做同样的事情,而且效果很好,就像我刚刚做的那样: 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 回答