linq-to-sql - 使用 LINQ 查询和基于两个参数的顺序连接两个表

标签 linq-to-sql join

我有两个表客户和订单。我想要一个 LINQ 查询来获取所有客户下的所有订单的列表,这些订单首先按月组织,然后按年组织。如果没有与客户对应的订单,则应显示“无订单”。

客户表的列是

customer_id
name
city

Orders 表的列是
order_id
order_date
order_total
customer_id

我尝试按以下方式编写它,但没有提供完整的输出。
var res = from cust in db.Customers 
          join ord in db.Orders 
               on cust.customer_id equals ord.customer_id into g 
          from d in g.DefaultIfEmpty() 
          select new { 
               name=cust.name, 
               oId=d.order_id==null?-1:d.order_id 
          };   

我该如何纠正?

最佳答案

我终于得到了正确的答案,这正是预期的结果。我已经把它放在下面了。我已经使用了两个 LINQ 查询来获得结果。第一个给出结果,但最终结果需要显示客户姓名和他们的订单总数,因此它是部分结果。第二个 LINQ 查询进一步优化了“partialResult”并给出了预期的结果。

var partialResult = (from c in db.Customers
                      join o in db.Orders

                      on c.customer_id equals o.customer_id
                      select new
                      {c.name,
                       o.order_total,
                       o.order_date }).OrderBy(m => m.order_date.Month).ThenBy(y =>              y.order_date.Year);

var finalResult = from c in db.Customers
                       orderby c.name
                       select new
                       {
                           name = c.name,
                           list = (from r in partialResult where c.name == r.name select r.order_total).ToList()

                       };

            foreach (var item in finalResult)
            {

                Console.WriteLine(item.name);
                if (item.list.Count == 0)
                {
                    Console.WriteLine("No orders");
                }
                else
                {
                    foreach (var i in item.list)
                    {
                        Console.WriteLine(i);
                    }
                }
            }

关于linq-to-sql - 使用 LINQ 查询和基于两个参数的顺序连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17789659/

相关文章:

c# - 使用 2 个 from 子句重写 linq-to-sql 查询以连接

php - MYSQL中如何连接所有三个表?

string - 连接两个 RDD[String] -Spark Scala

c# - 如何确定 Linq-To-Sql 对象中更改了哪些字段

c# - SQL Server 中 varchar(MAX) 的大小限制

.net - 在 linq to sql 中删除记录的最简洁语法

php - MySQLi 不从 JOIN 准备语句返回结果

database - 在 CouchDB 中使用 map reduce 输出更少的行

MySQL:使用 "ON"匹配不精确的值

c# - 如何在linq to sql中分组?