c# - C# linq 是否支持“反连接”语义?
问题描述
我用谷歌搜索了一会儿,没有找到直接的反连接语义示例。以 C# LINQ 为例,如何做到这一点?
解决方案
反连接基本上是一组不包含在另一组中的数据,可以Linq
用这样的 an表示IEnumerable.Except
:
double[] numbers1 = { 2.0, 2.0, 2.1, 2.2, 2.3, 2.3, 2.4, 2.5 };
double[] numbers2 = { 2.2 };
IEnumerable<double> onlyInFirstSet = numbers1.Except(numbers2);
foreach (double number in onlyInFirstSet)
Console.WriteLine(number);
这当然需要IEqualityComparer
为自定义类定义一个。
使用的另一种语法where
是:
var antiJoin = numbers1.Where(number => !numbers2.Contains(number));
在 Microsoft 文档上阅读有关Enumerable.Except 方法的更多信息。
编辑:
至于“ dbdriven linq ”,这是一个可以Entity Framework
使用的示例Except
:
var filteredProducts = db.Products.ToList()
.Except(db.Orders.Where(o => o.OrderId = 123)
.Select(o => o.Product).ToList())
.ToList();
至于where
替代方案:
var filterProducts = db.Orders.Where(o => o.OrderId = 123)
.Select(o => o.Product).ToList();
var antiJoinProducts = db.Products.Where(p => !filterProducts.Contains(p));
推荐阅读
- mysql - 为什么这个框架的默认 OVER () 行为?
- react-native - 如何在 redux 状态更改时做出反应以重新呈现页面
- java - MapStruct - 找不到 IntelliJ 的实现
- performance-testing - 我们如何在 gatling 中发送来自同一用户的多个请求?
- go - 通过强制转换或类型断言改变结构
- c# - 如何在 C sharp api 中获取 OpenID 连接流中的令牌?
- php - 如何在codeigniter中插入多个复选框值
- php - 如何使日期格式在所有环境中保持一致
- objective-c - popViewControllerAnimated 后 NSString 为 nil
- python - 仅从 BeautifulSoup 获取数字而不是整个 div