【发布时间】:2021-04-12 18:07:52
【问题描述】:
我有四个表在上下文中传递给页面。 4 个表中的每一个都由一个 Id 列连接。我想显示一个带有表格的页面,该表格结合了 4 个表格中的每一个表格的列。我还想对数据进行排序或搜索,并根据 1 个或所有表显示结果(例如,如果表 2 包含“名称”列,则搜索结果应仅显示与该名称匹配的行)
public IList<AllTables> AllTableData {get;set;}
public async Task OnGetAsync(
string sortOrder,
string queryFilter,
string searchString)
{
//setting sort and search Params
//......
IQueryable<Table1> table1= _context.Table1.Select(f => f);
IQueryable<Table2> table2= _context.Table2.Select(f => f);
IQueryable<Table3> table3= _context.Table3.Select(f => f);
IQueryable<Table4> table4= _context.Table4.Select(f => f);
if (!String.IsNullOrEmpty(searchString))
{
// e.g. table1= table1.Where(s => s.Id.ToString() == searchString);
}
//Example for sorting
switch (sortOrder)
{
case "Id":
table1= table1.OrderBy(s => s.Id);
break;
case "Name":
table2= table2.OrderBy(s => s.Id);
break;
}
//How do I combine all four tables
AllTableData = await (Join Tables 1-4).AsNoTracking().ToListAsync();
}
我尝试创建一个新类,如下所示
public Class AllTables
{
public Table1 Table1{get;set;}
public Table2 Table2{get;set;}
public Table3 Table3{get;set;}
public Table4 Table4{get;set;}
}
然后像这样组合数据
AllTableData= await table1
.Select(f=>new AllTables(
f,
table2.Where(g => g.Id== f.Id).FirstOrDefault(),
table3.Where(h => h.Id== f.Id).FirstOrDefault(),
table4.Where(i => i.Id== f.Id).FirstOrDefault(),
)).AsNoTracking().ToListAsync();
这给了我完整的表格数据,但是当我尝试根据 table2.Name 进行排序时,排序不起作用。
【问题讨论】:
标签: asp.net asp.net-core razor entity-framework-core