'System.Linq.IQueryable <newssite.models.domain.tbl_news>'不包含定义

时间:2016-07-17 08:55:01

标签: asp.net-mvc asp.net-mvc-5

我使用MVC5创建一个新闻网站,但我遇到了问题。

模型i中的

创建一个存储库文件夹并在此创建

的Rep_Setting

连接到DataBase中的Tbl_Setting。

public class Rep_Setting
{
    DataBase db = new DataBase();
    public Tbl_Setting Tools()
    {
        try
        {
            var qGetSetting = (from a in db.Tbl_Setting
                               select a).FirstOrDefault();
            return qGetSetting;
        }
        catch (Exception)
        {

            return null;
        }
    }
}

我为主页创建了一个Rep_News。

    DataBase db = new DataBase();
    Rep_Setting RSetting = new Rep_Setting();

    public List<Tbl_News> GetNews()
    {
        try
        {
            List<Tbl_News> qGetNews = (from a in db.Tbl_News
                                       where a.Type.Equals("News")
                                       select a).OrderByDescending(s => s.ID).Skip(0).Take(RSetting.Tools().CountNewsInPage).ToList();
            return qGetNews;
        }
        catch (Exception ex)
        {

            return null;
        }
    }

但此代码对我有误

OrderByDescending(s=>s.ID).Skip(0).Take(RSetting.Tools().CountNewsInPage).ToList();

错误:

  Error 18  'System.Linq.IQueryable<NewsSite.Models.Domain.Tbl_News>' does 

not contain a definition for 'Take' and the best extension method overload 

'System.Linq.Queryable.Take<TSource>(System.Linq.IQueryable<TSource>, int)' has 

some invalid arguments  

E:\MyProject\NewsSite\NewsSite\Models\Repository\Rep_News.cs    50  52  NewsSite

我如何解决它?

1 个答案:

答案 0 :(得分:1)

以这种方式试试。调试的计划是分割你的执行,这在许多情况下也使得一个更可重用的方法。如果可以的话,一个好主意是避免使用null和nullables,如果你使用它们&#34;故意&#34;你必须为他们制定计划。

scrapy.crawler

如果DataBase db = new DataBase(); Rep_Setting RSetting = new Rep_Setting(); public List<Tbl_News> GetNews() { int skip = 0; Tbl_Setting tools = RSetting.Tools(); if(tools == null){ throw new Exception("Found no rows in the database table Tbl_Setting"); } int? take = tools.CountNewsInPage;//Nullable if(!take.HasValue) { // Do you want to do something if its null maybe set it to 0 and not null take = 0; } string typeStr = "News"; List<Tbl_News> qGetNews = (from a in db.Tbl_News where a.Type.Equals(typeStr) select a).OrderByDescending(s => s.ID).Skip(skip).Take(take.Value); return qGetNews.ToList(); } 是一个空列表,那么您在尝试迭代它之后就不会破坏所有内容,就像您返回qGetNews一样。相反,如果返回null以获得点亮的返回null,则会为您提供更具弹性的结果。

所以我说可重复使用的方法,它更像是一个动作。所以你要解决这个问题。现在你有了一些可以重复使用的东西。

new List<>()

事实上,如果可以的话,你总是尽量避免返回null。

public List<Tbl_News> GetNews(string typeStr, int take, int skip = 0)
{
    List<Tbl_News> qGetNews = (from a in db.Tbl_News
                              where a.Type.Equals(typeStr)
                              select a).OrderByDescending(s => s.ID).Skip(skip).Take(take);
    return qGetNews.ToList();        
}