linq 查看模型以显示列表和单个项目

ogsagwnx  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(147)

我有三张这样的table:表A表B表C

MID | Name                         MID| someNumber           MID| Price
   ----| -----                     ------| -----                 ---- | -----   
   001 | Iphone                    001   | 02389                 001  | 434
   001 | Iphone X8                  001  | 02389                  001 | 34434
   003 | Iphone ns                   003   | 43533                 003 | 343
   003 | Tissue                   003    | 23123                 003  | 234
   006 | Bottle                   006    | 43453                 006  | 454

在应用程序中,有两个搜索字段:搜索编号和另一个称为搜索名称的字段
当用户点击submit时,我想对这些表进行查询并显示如下输出:如果数字匹配,我希望显示所有表中与搜索到的数字匹配的所有记录,但不是以列表的形式,而是以显示记录总数的合并记录(一行中的单个记录)的形式。
例如,如果您搜索02389,则在tableB中有两条记录001,因此我希望输出:

Number | Name | Price | TotalRecords
------------------------------------
02389  |Iphone|434    |  2

单击此记录时,它将展开以显示每一行的记录总数,如下所示:

Number | Name | Price |
-----------------------
 02389 |Iphone|434    |  
 02389 |Samsung|34434 |

当您搜索“name”时,它将进行模糊搜索,以显示与该名称匹配的所有记录,但将基于合并的“someNumber”显示数据。例如,如果您搜索“iPhone”,则会有三条记录包含单词iPhone,因此输出如下所示:

Number  | Name     | Price | TotalRecords
------------------------------------
 02389   |Iphone   |434     |  2     
 43533   |Iphone ns|434     |  1

我现在的问题是,考虑到视图只接受一个模型,我已经使用了视图模型,但是我如何使模型保存单个匹配记录,以及另一个保存列表并相应地在同一视图中显示呢?我的代码快照是这样的

var userEnterSearchValue = from x in _db.tableB select x;
  userEnterSearchValue = userEnterSearchValue.AsNoTracking().Where(x => 
  x.Name.Contains(model.NameSearch) || x.Number.Contains(model.NumberSearch));
 
  var resultsFromDb = userEnterSearchValue.OrderBy(x => x.Name).ToList(); //this holds 
  matching search values from db

  foreach (var i in resultsFromDb)
  {
    var MID= i.MID;
    var getPrice = _db.TABLEC.Where(a => a.MID== 
    MID).FirstOrDefault().Price; //this is how how I get the price
   
   //How do I search to add up all the prices that match a particular number for example 
   get all prices in table C matching the number '02389' (in TABLE B)?
  
  }
                               
  ViewModel vm = new ViewModel
  {
  ListOfRecords = resultsFromDb = resultsFromDb.OrderBy(x => 
  x.SomeNumber).ToList(),

  //I need now to find a way to get a single record that match multiple numbers or name? 
  //I have started it off like this
  ConsolidatedRecord= resultsFromDb = resultsFromDb.GroupBy(x => 
  x.SomeNumber).Select(a=>a.First()).ToList(),
                        

  };
  return View(vm)

我只需要进行正确的链接查询,将这些数据连接在一起,这样它就可以显示为多个列表,也可以显示为同一视图中具有统一匹配编号的单个列表)希望这有意义吗?有帮助吗?

xbp102n0

xbp102n01#

You might consider consolidating the data sets to present the data as a single table from the start then use something like datatables.jquery to filter. This should accomplish what you ask.

相关问题