LINQ / C#从列表中删除其他多个列表中的所有项目

时间:2020-10-17 10:35:04

标签: c# asp.net linq lambda

我有以下设置:

  • 1个列表,其中包含约500种产品。

  • 1个分类列表,每个分类包含产品列表(在分类内部)和一些其他属性。

我的模型看起来像这样(简化):

public Model() {
   public List<Products> {get; set;}
   public List<Assortment> {get; set;}
}

和分类看起来像这样(简化)

public Assortment() {
   public int ID {get; set;}
   public string Name {get; set;}
   public List<Product> Products {get; set;
}

我想显示所有未分类的产品

我尝试过这样的事情:

Model.Products.Except(x => Model.Assortments.Where(y => y.Products.Contains(x)).Select(z => z.Products).ToList()

但是编译器告诉我

“ Lambdaexpression”无法转换为类型 “ IEnumerable”,因为它不是委托类型

(从德语翻译成英语)

我也使用RemoveAll或Where尝试了一些操作,但是我无法使其正常工作。

1 个答案:

答案 0 :(得分:4)

使用SelectMany,您可以获取所有分类的所有产品

Model.Products.Except(Model.Assortments.SelectMany(a => a.Products))

因此没有分类的产品是:

Equals

正如@GuruStron在评论中指出的那样,这假定可以将分类中的产品与Products集合中的产品进行标识,因为它们是同一对象,或者可以通过适当的import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: SampleApp(), debugShowCheckedModeBanner: false, ); } } class SampleApp extends StatefulWidget { @override _SampleAppState createState() => _SampleAppState(); } class _SampleAppState extends State<SampleApp> { RangeValues _currentRangeValues = RangeValues(18, 60); dialog(BuildContext context) { showDialog( context: context, builder: (BuildContext context) { return StatefulBuilder(builder: (thisLowerContext, innerSetState) { return Dialog( child: Container( width: double.infinity, height: 300, child: RangeSlider( values: _currentRangeValues, min: 18.0, max: 60.0, divisions: 1, labels: RangeLabels( _currentRangeValues.start.round().toString(), _currentRangeValues.end.round().toString(), ), onChanged: (RangeValues values) { innerSetState(() { _currentRangeValues = values; }); }, ), ), ); }); }, ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Your heading'), ), body: RaisedButton( child: Text('press'), onPressed: () { dialog(context); }, )); } } 覆盖。

相关问题