sách gpt4 ăn đã đi

c# - Linq - 检查所有但仅当至少有一个时

In lại Tác giả: Walker 123 更新时间:2023-11-30 16:00:55 24 4
mua khóa gpt4 giày nike

我正在 Linq 中编写一个查询,它需要检查列表中的一个或多个项是否通过谓词A(),并且没有 strong> 传递谓词 B()。它需要是单个查询才能启用 Linq to SQL。因此,对于以下列表,结果应如下所示,其中 a 传递谓词 A()b 传递谓词 B():

1. [ a, a ] => true
2. [ a ] => true
3. [ a, b ] => false
4. [ b, b ] => false
5. [ b ] => false
6. [ ] => false

我尝试了以下方法,但每种方法都会在某些情况下失败:

// Fails in case 6
MyList.All(x => A(x) && !B(x));

// Fails in case 3
MyList.Where(x => !B(x)).Count(x => A(x)) > 0;

// This works, but it's not a single query anymore
MyList.All(x => A(x) && !B(x)) && Mylist.Count() > 0;

我觉得我在这里需要的是与 all 等价的东西,但对于空列表返回 false。例如,这将在所有情况下通过:

MyList.AllButReturnFalseIfListIsEmpty(x => A(x) && !B(x));

我怎样才能做到这一点?

câu trả lời hay nhất

Bạn có thể làm điều này:

var result = MyList
.Select(x => B(x) ? -1 : (A(x) ? 1 : 0))
.Aggregate(0, (p, v) => v == -1 || p == -1 ? -1 : p + v) > 0;

查询工作如下:

    BĐÚNG VẬY 时,
  • Lựa chọn 生成 -1;否则,如果 AĐÚNG VẬY,则生成 1;如果 A 为 false,则生成 0
  • Aggregate-1, 0, 1 检查这个数字列表。如果它看到 -1,则聚合结果为 -1。否则,聚合结果为正值之和。
  • 最后的比较确保至少有一个 A 而没有 B

关于c# - Linq - 检查所有但仅当至少有一个时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39344841/

24 4 0
Walker 123
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress