Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用desider输出运行SQL查询的实体框架_C#_Sql_Entity Framework_Entity Framework 4.1 - Fatal编程技术网

C# 使用desider输出运行SQL查询的实体框架

C# 使用desider输出运行SQL查询的实体框架,c#,sql,entity-framework,entity-framework-4.1,C#,Sql,Entity Framework,Entity Framework 4.1,当使用Linq时,我不能使用SQL全文搜索功能,所以我想在DbSet上使用SqlQuery方法,它允许我编写原始SQL查询 让我们考虑下面的代码: IQueryable<Message> query = DBContext.Set<Message>(); PagedList<Message> messages = query.Where(x => x.Content.Contains("magic")) .OrderBy(x => x.Cr

当使用Linq时,我不能使用SQL全文搜索功能,所以我想在DbSet上使用SqlQuery方法,它允许我编写原始SQL查询

让我们考虑下面的代码:

IQueryable<Message> query = DBContext.Set<Message>();
PagedList<Message> messages = query.Where(x => x.Content.Contains("magic"))
    .OrderBy(x => x.CreatedDate)
    .ToPagedList<Message>(50, 2);
IQueryable query=DBContext.Set();
PagedList messages=query.Where(x=>x.Content.Contains(“魔法”))
.OrderBy(x=>x.CreatedDate)
.ToPagedList(50,2);
如果要运行以下SqlQuery查询:

DBContext.Set<Message>().SqlQuery("SELECT * FROM Message WHERE CONTAINS("Content", 'magic')");
DBContext.Set();
SqlQuery方法返回IEnumerable,我希望返回PagedList对象。实现这一目标的最佳(好)方法是什么?请注意,我希望我的数据库执行sql查询,而不是在内存中进行筛选

页面列表实现

public class PagedList<T> : List<T>, IPagedList
{
    public PagedList()
    {
        this.TotalCount = 0;
        this.PageSize = 0;
        this.PageIndex = 0;
        this.TotalPages = 0;
        this.CurrentPage = 0;
    }

    public PagedList(IQueryable<T> source, int pageIndex, int pageSize)
    {
        this.TotalCount = source.Count();
        this.PageSize = pageSize;
        this.PageIndex = pageIndex;
        this.TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);
        this.CurrentPage = Math.Max(1, pageIndex);
        this.AddRange(source.Skip((this.CurrentPage - 1)  * pageSize).Take(pageSize).ToList());
    }

    public PagedList(List<T> source, int index, int pageSize)
    {
        this.TotalCount = source.Count();
        this.PageSize = pageSize;
        this.PageIndex = index;
        this.TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);
        this.CurrentPage = Math.Max(1, index);
        this.AddRange(source.Skip(index * pageSize).Take(pageSize).ToList());
    }

    public int TotalCount { get; set; }
    public int TotalPages { get; set; }
    public int PageSize { get; set; }
    public int PageIndex { get; set; }
    public int CurrentPage { get; set; }
}
公共类页面列表:列表,IPagedList
{
公共页面列表()
{
这个.TotalCount=0;
此参数为0.PageSize=0;
这个.PageIndex=0;
this.TotalPages=0;
this.CurrentPage=0;
}
公共页面列表(IQueryable源、int-pageIndex、int-pageSize)
{
this.TotalCount=source.Count();
this.PageSize=页面大小;
this.PageIndex=PageIndex;
this.TotalPages=(int)数学上限(TotalCount/(double)PageSize);
this.CurrentPage=Math.Max(1,页面索引);
this.AddRange(source.Skip((this.CurrentPage-1)*pageSize.Take(pageSize.ToList());
}
公共页面列表(列表源、整型索引、整型页面大小)
{
this.TotalCount=source.Count();
this.PageSize=页面大小;
this.PageIndex=索引;
this.TotalPages=(int)数学上限(TotalCount/(double)PageSize);
this.CurrentPage=Math.Max(1,索引);
this.AddRange(source.Skip(index*pageSize).Take(pageSize.ToList());
}
公共整数TotalCount{get;set;}
公共整型TotalPages{get;set;}
公共int PageSize{get;set;}
公共int页索引{get;set;}
public int CurrentPage{get;set;}
}
分页列表扩展方法:

public static PagedList<T> ToPagedList<T>(this IQueryable<T> query, int pageIndex, int pageSize) where T : class
{
      return new PagedList<T>(query, pageIndex, pageSize);
}
publicstaticpagedlisttopagedlist(此IQueryable查询,intpageIndex,intpageSize),其中T:class
{
返回新的页面列表(查询、页面索引、页面大小);
}

您是否尝试过简单地

DBContext.Set<Message>().SqlQuery("SELECT * FROM Message WHERE CONTAINS("Content", 'magic')")
.AsQueryable()
.ToPagedList<Message>(50, 2);
DBContext.Set().SqlQuery(“从包含内容的消息中选择*,'magic'))
.AsQueryable()
.ToPagedList(50,2);

我突然想到了这一点。问题是,所有与原始查询匹配的对象都必须从数据库加载到内存中。