linq中如何在join中指定多个条件

 

public ActionResult Edit(int id)
        {
            using (DataContext db = new DataContext(ConfigurationManager.ConnectionStrings["sqlConnection"].ConnectionString))
            {
                IQueryable<ClassInformation> result = from c in db.GetTable<TClass>()
                                                      join t in db.GetTable<TTeacher>()
                                                      on new { id = c.ID, id1 = c.ID } 
                                                      equals new { id = t.ClassID, id1 = id }
                                                      select new ClassInformation { ID = c.ID, ClassID = t.ClassID, Name = c.Name, TeacherName = t.Name, Address = t.Address, Phone = t.Phone, Email = t.Email };
                ClassInformation k = result.Single();
                ViewData["K"] = k;
                return View();


            }

        }
借助于匿名类型:其实和解决按多条件分组的思路是一样的。
var a = from m in DbContext.Set<T1>()
                    join q in DbContext.Set<T2>() 
                    on  new { m.ID, Phone=m.Phone1 } equals new { q.ID, Phone=q.Phone2 }
                    where m.Phone1 !=null
                    select new { m.ID, m.Phone1 };
            a = a.OrderBy(m => m.Phone1).Skip(2).Take(2);
SELECT 
            [Extent1].[ID] AS [ID], 
            [Extent1].[Phone1] AS [Phone1], 
AS [C1]
            FROM  [dbo].[T1] AS [Extent1]
            INNER JOIN [dbo].[T2] AS [Extent2] ON ([Extent1].[ID] = [Extent2].[ID]) AND (([Extent1].[Phone1] = [Extent2].[Phone2]) OR (([Extent1].[Phone1] IS NULL) AND ([Extent2].[Phone2] IS NULL)))
            WHERE [Extent1].[Phone1] IS NOT NULL

  所以linq为什么要这么写,看到生成的sql语句 就不言而喻了,因为linq多管闲事的将NULL给总结进去了

原文地址:https://www.cnblogs.com/robertyao/p/11136559.html