我的数据库中有一个表有四列(priceId,price,orderId,projectId,customerId,categoryId)。 如果我有categoryId 1并选择具有该值的所有行。
从那个结果我想要在这个优先级中选择第一个,具有orderId,第二个具有projectId,第三个具有customerId,最后一个在customerid,porjectid和orderid上具有空(null)。
该表是一个价格矩阵,用于存储我的类别的价格,我的项目,订单或客户可以有独特的价格。
有人知道如何使用LINQ在mvc 5 C#中进行查询? 我坚持这个。
谢谢!
答案 0 :(得分:0)
这不优雅,但应该完成工作。
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;
答案 1 :(得分:0)
您可以通过订购结果来完成此操作:
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
的那些将位于顶部,依此类推。
我不确定"是否有orderId"你的意思是 orderid
(即非空)或特定的 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;