LINQ在_Layout.cshtml中使用的方法

时间:2011-10-01 14:15:31

标签: c# asp.net-mvc asp.net-mvc-3 linq razor

我只是尝试从数据库中检索一些数据,并将其显示在_Layouts.cshtml文件中。我想用模型文件夹中的方法做到这一点,对吧?

我的下面的脚本在这里工作,但它不漂亮,看一看。

这是我的模特:

namespace MvcBreakingNews.Models
{
public class ListCategories
    {
        public IList<string> arrTest() {
            IList<string> myList = new List<string>();
            DataClassesDataContext dt = new DataClassesDataContext();

            var q = from c in dt.categories select c;
            foreach (var item in q)
            {
                myList.Add(item.category1.ToString());
            }
                return myList;
            }
        }
    }
}

这是我的_Layout.cshtml

@using MvcBreakingNews.Models
...

@{
   ListCategories objC = new ListCategories();

   foreach (var item in objC.arrTest())
   {
       <li><a href="#">@item</a></li>         
   }
}

现在我想做什么,或者我想做什么。是摆脱我的方法中的foreach循环并将数组直接发送到_Layout.cshtml

我该怎么做?

3 个答案:

答案 0 :(得分:1)

您可以使用ToList() extension method

public IList<string> arrTest()
{
    DataClassesDataContext dt = new DataClassesDataContext();

    var q = from c in dt.categories
            select c.category1.ToString();

    return q.ToList();
}

或者您可以直接返回q,这需要更改返回类型:

public IQueryable<string> arrTest()
{
    DataClassesDataContext dt = new DataClassesDataContext();

    return from c in dt.categories
           select c.category1.ToString();
}

答案 1 :(得分:0)

实现此目的的最佳方法是创建BaseController并使所有控制器派生自该BaseController。

您的新BaseController所做的是每次都传递一个模型。我希望你有这个想法。

这是一个很好的例子:

How to create a strongly typed master page using a base controller in ASP.NET MVC

答案 2 :(得分:0)

使用Lambda表达式执行相同操作的最短方法如下。

public IList<string> arrTest()
{
    DataClassesDataContext dt = new DataClassesDataContext();

    return dt.categories.select(c=>c.category1.ToString()).ToList();
}