MVC 5 EF Code First选择基于声明

时间:2014-10-07 13:55:28

标签: c# entity-framework asp.net-mvc-5

我的数据库中有一个表有四列(priceId,price,orderId,projectId,customerId,categoryId)。 如果我有categoryId 1并选择具有该值的所有行。

从那个结果我想要在这个优先级中选择第一个,具有orderId,第二个具有projectId,第三个具有customerId,最后一个在customerid,porjectid和orderid上具有空(null)。

该表是一个价格矩阵,用于存储我的类别的价格,我的项目,订单或客户可以有独特的价格。

有人知道如何使用LINQ在mvc 5 C#中进行查询? 我坚持这个。

谢谢!

2 个答案:

答案 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;