如何解决LINQ / C#从列表中删除其他多个列表中的所有项目 我想显示所有未分类的产品
我有以下设置:
我的模型看起来像这样(简化):
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尝试了一些操作,但是我无法使其正常工作。
解决方法
使用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);
},));
}
}
覆盖。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。