【问题标题】:MVC5 EF CodeFirst Select based on statementMVC5 EF CodeFirst Select 基于语句
【发布时间】:2014-10-07 13:55:27
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

  • 你能举个例子吗?顺便说一句,MVC 与 Linq 无关。
  • 我想我理解你的第一段。您从表中选择了 categoryId 为 1 的所有内容。我需要对您的第二段进行一些澄清。你说你想从第一个结果中选择一个特定的优先级?您的意思是要对第一个查询的结果进行排序,还是您现在要根据第一个查询进行 4 个新查询,还是我完全错了?
  • 你几乎是对的。它用于基于第一个查询的新查询。如果它有一个 orderid,我想选择该行的价格。如果 orderId 为空。我想检查下一个女巫是 projectId,如果它也是空的,我想检查下一个 customerId,如果它也是空的,我想要带有 wmpty 订单、项目和客户的行的价格。
  • 您希望在一份声明中完成这一切?
  • 不需要。如果可能的话,它可能不止一个。我只想要基于优先级的正确价格。

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


【解决方案1】:

您可以通过排序结果来做到这一点:

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 的记录将位于顶部(falsetrue 之前)。如果没有,projectId 的将在顶部,以此类推。

我不确定“具有 orderId”是指具有 an 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;

【讨论】:

    【解决方案2】:

    这并不优雅,但应该可以完成工作。

            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;
    

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 1970-01-01
      • 2021-12-05
      • 2020-12-27
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多