C# LINQ左外连接语法差异
在LINQ中至少有两种执行左外连接的方法C# LINQ左外连接语法差异,c#,linq,join,linq-to-objects,left-join,C#,Linq,Join,Linq To Objects,Left Join,在LINQ中至少有两种执行左外连接的方法 class Customer { public int ID { get; set; } public string Name { get; set; } } class Order { public int ID { get; set; } public string Product { get; set; } } static void Main() { // Example cus
class Customer
{
public int ID { get; set; }
public string Name { get; set; }
}
class Order
{
public int ID { get; set; }
public string Product { get; set; }
}
static void Main()
{
// Example customers.
var customers = new Customer[]
{
new Customer{ID = 5, Name = "Sam"},
new Customer{ID = 6, Name = "Dave"},
new Customer{ID = 7, Name = "Julia"},
new Customer{ID = 8, Name = "Sue"},
new Customer{ID = 9, Name = "Joe"}
};
// Example orders.
var orders = new Order[]
{
new Order{ID = 5, Product = "Book"},
new Order{ID = 6, Product = "Game"},
new Order{ID = 7, Product = "Computer"},
new Order{ID = 8, Product = "Shirt"},
new Order{ID = 8, Product = "TShirt"}
};
// First Way
var query = from c in customers
join o in orders on c.ID equals o.ID into co
from x in co.DefaultIfEmpty()
where x != null && x.Product == "Shirt"
select new {c, x};
// Second Way
var query2 = from c in customers
from o in orders
where c.ID == o.ID && o.Product == "Shirt"
select new {c, o};
}
我发现了很多第一种方式的例子(使用'into'),这就是我用来进行左外连接的方式。最近我发现了第二种方法,看起来更简单。我进行了测试,结果都是一样的。现在我的问题是,是否有任何隐藏的差异,性能,或者只是语法上的糖分
非常感谢。如果不使用,则应使用第一种方法=空检查 左外部联接选择左表中的所有内容以及右表中匹配的所有项,如果右表中不存在匹配项,则结果仍然返回,但右表中的值为null(linq将其转换为集合项类型的默认值) 两个查询都有效地执行内部联接,因此它们是相同的 得到不同的结果
// First Way
var query = from c in customers
join o in orders on c.ID equals o.ID into co
from x in co.DefaultIfEmpty()
where c.Id>5
select new {c, x};
// Second Way
var query2 = from c in customers
from o in orders
where c.ID == o.ID && c.ID > 5
select new {c, o};
你们到底为什么要用一个左外连接,当然这应该是一个直内连接,因为=空支票?谢谢鲍勃。你说得对,如果我使用,它们都是内部连接!=空检查。再次感谢。