Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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# 我可以在方法中使用动态实体上下文吗?_C#_Asp.net_Generics_Entity Framework 5_Dynamic Linq - Fatal编程技术网

C# 我可以在方法中使用动态实体上下文吗?

C# 我可以在方法中使用动态实体上下文吗?,c#,asp.net,generics,entity-framework-5,dynamic-linq,C#,Asp.net,Generics,Entity Framework 5,Dynamic Linq,我有一个gridview排序和分页的方法,我正在尝试使其可用于泛型类型,但我正在努力找出如何使实体上下文(MyContext)和表(tblReports)动态变量-有人能帮我吗 protected void PopulateGridView<T>(GridView grid) { string columnToSortBy = (string)(ViewState["gridview_sortbycolumn"] ?? string.Empty); SortDirec

我有一个gridview排序和分页的方法,我正在尝试使其可用于泛型类型,但我正在努力找出如何使实体上下文(MyContext)和表(tblReports)动态变量-有人能帮我吗

protected void PopulateGridView<T>(GridView grid)
{
    string columnToSortBy = (string)(ViewState["gridview_sortbycolumn"] ?? string.Empty);
    SortDirection sortDirection = (SortDirection)(ViewState["gridview_sortdirection"] ?? SortDirection.Descending);
    int pageIndex = (int)(ViewState["gridview_pageindex"] ?? 0);
    int pageSize = grid.PageCount;

    using (MyContext db = new MyContext())
    {
        if (columnToSortBy != string.Empty)
        {
            var query = db.tblReports.OrderBy(columnToSortBy + " " + sortDirection).Skip(pageIndex * pageSize);
            grid.DataSource = query.ToList();
        }
        else
        {
            string defaultColumn = string.Empty;

            foreach (var field in typeof(T).GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance))
            {
                defaultColumn = field.Name.Remove(field.Name.IndexOf(">")).Replace("<", string.Empty);
                break;
            }

            var query = db.tblReports.OrderBy(defaultColumn).Skip(pageIndex * pageSize);
            grid.DataSource = query.ToList();
        }

        grid.PageIndex = pageIndex;
        grid.DataBind();
    }
}
protectedvoid PopulateGridView(网格视图网格)
{
string columnToSortBy=(string)(ViewState[“gridview\u sortbycolumn”]??string.Empty);
SortDirection SortDirection=(SortDirection)(视图状态[“gridview\u SortDirection”]??SortDirection.Descending);
int pageIndex=(int)(视图状态[“gridview_pageIndex”]??0);
int pageSize=grid.PageCount;
使用(MyContext db=new MyContext())
{
if(columnToSortBy!=string.Empty)
{
var query=db.tblReports.OrderBy(columnToSortBy+“”+sortDirection).Skip(页面索引*页面大小);
grid.DataSource=query.ToList();
}
其他的
{
string defaultColumn=string.Empty;
foreach(typeof(T).GetFields中的var字段(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance))
{

defaultColumn=field.Name.Remove(field.Name.IndexOf(“>”)).Replace()通过将实体表作为@Jeroen建议的参数传递并将linq查询结果强制转换为泛型类型,使其正常工作

以下是所有感兴趣的人的最终代码:

protected void PopulateGridView<T>(GridView grid, DbSet entityTable)
{
    string columnToSortBy = (string)(ViewState["gridview_sortbycolumn"] ?? string.Empty);
    SortDirection sortDirection = (SortDirection)(ViewState["gridview_sortdirection"] ?? SortDirection.Descending);
    int pageIndex = (int)(ViewState["gridview_pageindex"] ?? 0);

    if (columnToSortBy != string.Empty)
    {
        grid.DataSource = entityTable.OrderBy(columnToSortBy + " " + sortDirection).Cast<T>().ToList();
    }
    else
    {
        // use linq reflection to get the first entity field name to sort by
        string defaultColumn = string.Empty;

        foreach (var field in typeof(T).GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance))
        {
            defaultColumn = field.Name.Remove(field.Name.IndexOf(">")).Replace("<", string.Empty);
            break;
        }

        grid.DataSource = entityTable.OrderBy(defaultColumn).Cast<T>().ToList();
    }

    grid.PageIndex = pageIndex;
    grid.DataBind();
}
受保护的void PopulateGridView(GridView网格,DbSet entityTable)
{
string columnToSortBy=(string)(ViewState[“gridview\u sortbycolumn”]??string.Empty);
SortDirection SortDirection=(SortDirection)(视图状态[“gridview\u SortDirection”]??SortDirection.Descending);
int pageIndex=(int)(视图状态[“gridview_pageIndex”]??0);
if(columnToSortBy!=string.Empty)
{
grid.DataSource=entityTable.OrderBy(columnToSortBy+“”+sortDirection).Cast().ToList();
}
其他的
{
//使用linq反射获取要排序的第一个实体字段名
string defaultColumn=string.Empty;
foreach(typeof(T).GetFields中的var字段(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance))
{

defaultColumn=field.Name.Remove(field.Name.IndexOf(“>”)).Replace(“出了什么问题?示例代码做了什么(或没有)。感谢您的回复,我目前必须声明一个特定的实体上下文(MyContext)并引用一个特定的实体表(tblReport))-我希望能够在方法之外对它们进行抽象,这样它就可以成为通用的并处理任何gridview,而不必绑定到特定的配置。您不能将tblReports作为参数传递吗?并使用
typeof(tableparameter)
而不是
typeof(t)
。make:
PopulateGridView(grid,db.tableReports);
寻找tblReports基类作为参数类型。我希望可以使用context.typeof(T)之类的东西在我的查询中,但它不喜欢这种语法。我不希望将tblReports作为参数传递,因为我已经通过使该方法接受泛型类型解决了这个问题。将其作为泛型传递的问题是,没有实例,因此您仍然需要在某处传递实例。如果传递实例,可以使用
GetType()
以获取其类型。