用另一个实体过滤实体
Posted
技术标签:
【中文标题】用另一个实体过滤实体【英文标题】:Filtering entity with another entity 【发布时间】:2022-01-09 05:31:22 【问题描述】:我试图用这种方法过滤一个实体和另一个实体:
[HttpGet]
public async Task<IActionResult> GetViewIO()
int uid = (int)HttpContext.Session.GetInt32("userId").Value;
if(uid == 2)
uid = 33;
var listAeGrp = _context.ListofAE.FromSql($"Execute ListOfAe uid");
var _orders = _context.OrderHeaderView.FromSql(@"OrderHeaderView").OrderByDescending(f => f.id).OrderBy(p => p.platform_id);
var orders = await _orders.Where(x => listAeGrp.Any(y => y.id == x.created_by)).ToListAsync();
return Json(orders);
所以基本上,我使用 FromSQL 和 MSSQL 中的存储过程获取 listAeGrp 和 _orders 的值。 listAeGrp 依赖于当前登录的用户,而 _orders 则创建了一个简单的数据选择。
使用这个单独的变量,我可以检查它们是否具有值,但是当我使用 .Any linq 进行过滤时,会返回错误:
无法解析表达式'value(Microsoft.Data.Entity.Query.Internal.EntityQueryable`1[DigitalMVC.API.Models.listofAE]).FromSql("Execute ListOfAe 33", value(System.Object[]) )':目前不支持“Microsoft.Data.Entity.RelationalQueryableExtensions.FromSql”方法的这种重载。
我目前用的是VS2015,dnx4.5.1
所以我的问题是:
-
我哪里出错了?我对 MVC 和 Linq 还很陌生。
还有其他方法吗?
非常感谢您的帮助!
【问题讨论】:
小心FromSql;用它很容易意外启用sql注入 那么,ListOfAe 到底是什么?什么样的数据库可编程性? @CaiusJard 这是一个用于过滤 _orders 的 ID 列表 显然,我不必使用实体来过滤另一个实体。我所做的是,我创建了一个返回 ListOfAe 的 ListOrderHeaderView.FromSql(@"OrderHeaderView").Where(x => allowedUserId.Contains(x.created_by))
我所做的不是使用实体来过滤另一个实体,而是创建了一个返回 int 列表的函数
public List<int>ListOfUsers(int uid)
List<int> listOfAeGroup = new List<int>();
var listAeGrp = _context.ListofAE.FromSql($"Execute ListOfAe uid");
listOfAeGroup = listAeGrp.Select(x => x.id).ToList();
return listOfAeGroup;
然后我用了返回的函数,这样使用:
List<int> allowedUserId = ListOfUsers(uid);
var orders = await _context.OrderHeaderView.FromSql(@"OrderHeaderView").Where(x => allowedUserId.Contains(x.created_by)).OrderByDescending(f => f.id).OrderBy(p => p.platform_id).ToListAsync();
return Json(orders);
【讨论】:
以上是关于用另一个实体过滤实体的主要内容,如果未能解决你的问题,请参考以下文章
设计一个休息网址 - 在实体(不是最后一个实体)上使用多个参数进行过滤