繁体   English   中英

“对象”不包含“类型”的定义

[英]'object' does not contain a definition for 'type'

我刚收到这个错误,但我不知道这是什么。 我一直在寻找答案,但是没有人可以回答主要问题,或者我只是错过了一些东西。 这是我的代码:

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子句进行简单选择,则可以正常运行。公共ActionResult Index(){

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


            return View();
        }

我可能是什么问题? 我似乎有许多toturial都在做同样的事情,并且像我刚才所做的那样工作得很好: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);

            }

这里一切都很好。 为什么会出问题呢?

您不能从方法中返回匿名类型。 而是,创建一个新类型并返回该类型。

例如:

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.
}

在上一个示例中,您没有使用“ item.type”。 除此之外,System.Object不包含属性“ type”。 您可以使用“ GetType()”。
请参阅此处以供参考。

问题在于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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM