MVC实体框架将一列作为数组

时间:2012-09-20 19:01:47

标签: c# asp.net-mvc-3 sql-server-2008 entity-framework

我的应用程序是使用Entity Framework的asp.net MVC3。我试图使用以下内容从表中获取一列的列表:

   public ActionResult Index()
        {
            //var list = db.CasesProgresses.ToList();
            var SeriesList = GetSeriesList(Learner_ID);
            return View();
        }



        public List<string> GetSeriesList(string item)
        {
            // get DataTable dt from somewhere.
            List<string> sList = new List<string>();
            foreach (CasesProgress row in db.CasesProgresses)
            {
                sList.Add(row[0].ToString());
            }
            return sList;  
        }

我收到两个错误:

Cannot apply indexing with [] to an expression of type 'caseprog.Models.CasesProgress' and
The name 'Learner_ID' does not exist in the current context

非常感谢您的建议。

4 个答案:

答案 0 :(得分:3)

您可能需要阅读CasesProgress对象的属性名称

更改此

sList.Add(row[0].ToString());

sList.Add(row.YourPropertyNameHereWhichIsOfStringType);

如果属性不是字符串类型,( ex:Integer / decimal ),您可以对其应用ToString()方法,然后添加到字符串集合中。

sList.Add(row.Learner_ID.ToString());

假设Learner_ID是具有数字类型的CasesProgress类的属性。

答案 1 :(得分:1)

 foreach (CasesProgress row in db.CasesProgresses)
 {
   sList.Add(row.SomePropertyYouNeed.ToString());
 }

如果您使用foreach,则没有[0]。如果你使用正常的for (int i =0; i < list.Count; i ++;)那么你就可以做到这一点。但是当然,你必须将0改为i,你仍然需要访问一个属性。如果你的List有不同的类型,你就不会来做这件事,但在你当前的例子中你需要添加一个String。

答案 2 :(得分:1)

The name 'Learner_ID' does not exist in the current context 
GetSeriesList(Learner_ID);

Learner_ID - 未在您的操作中定义,您可以将其删除,因为未使用GetSeriesList(字符串项)中的参数(也是删除参数)。

Cannot apply indexing with [] to an expression of type 'caseprog.Models.CasesProgress'

foreach行中,这是与集合中的单独项目,这就是您使用点符号row.Property按属性访问它的原因。

答案 3 :(得分:0)

为什么不保持简单并使用'通常'语法


var list = db.CasesProgresses.Select(o=>o.YourPropertyName).ToList();

如果它是一个int而你需要它作为字符串列表,只需用上面的YourPropertyName.ToString()替换YourPropertyName