我有以下设置:
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尝试了一些操作,但是我无法使其正常工作。
答案 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);
},
));
}
}
覆盖。