MVC5 EF CodeFirst根据语句选择
本文关键字:语句 选择 EF CodeFirst MVC5 | 更新日期: 2023-09-27 18:25:52
我的DB中有一个表,它有四列(priceId、price、orderId、projectId、customerId、categoryId)。如果我的categoryId为1,并选择所有具有该值的行。
从这个结果中,我想按这个优先级选择第一个,它有orderId,第二个有projectId,第三个有customerId,最后一个在customerId、porjectid和orderId上为空(null)。
该表是一个价格矩阵,用于存储我的类别和我的项目、订单或客户的价格。
有人知道我如何用LINQ在mvc 5 C#中进行查询吗?我陷入了困境。
谢谢!
您可以通过对结果进行排序来实现这一点:
var products = from p in Products
where p.Category == categoryId
orderby !p.orderId.HasValue,
!p.projectId.HasValue,
!p.customerId.HasValue,
p.Name
select p.price;
var result = procucts.FirstOrDefault();
具有orderId
的记录将位于顶部(false
位于true
之前)。如果没有,则具有projectId
的将在顶部,依此类推
我不确定您所说的"有订单ID"是指有一个orderid
(即不为null),还是有一个特定的orderid
。如果后者为真,则可以更改谓词:
var products = from p in Products
where p.Category == categoryId
orderby !p.orderId == orderId,
!p.projectId == projectId,
!p.customerId == customerId,
p.Name
select p.price;
这并不优雅,但它应该能完成任务。
using (var context = new NameofEntity())
{
var result = context.NameofEntityObject
.Where(a => a.categoryId == 1);
var result1 = result
.Where(a => a.orderId != null)
.FirstOrDefault()
.price;
var result2 = result
.Where(a => a.projectId != null)
.FirstOrDefault()
.price;
var result3 = result
.Where(a => a.customerId != null)
.FirstOrDefault()
.price;
var result4 = result
.Where(a => a.orderId == null)
.Where(a => a.projectId == null)
.Where(a => a.customerId == null)
.FirstOrDefault()
.price;
}
if (result1 != null)
return result1;
if (result2 != null)
return result2;
if (result3 != null)
return result3;
return result4;