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#中进行查询吗?我陷入了困境。

谢谢!

MVC5 EF CodeFirst根据语句选择

您可以通过对结果进行排序来实现这一点:

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;