所以我对显示草稿产品的API有问题。
因此,我的解决方案是在设置视图之前遍历列表并删除任何草拟产品。
但是我对LinQ并不熟悉,所以我不完全确定该怎么做,或者用什么短语ID来查看更多内容
这是我的尝试
尝试1:仅删除1个产品(如果我说“任意” |它只是说不能将布尔值转换为产品)
var listitem = (from itm in products where itm.status == "draft" select itm).FirstOrDefault();
products.Remove(listitem);
//Also tried something like
.Where(a => a.status == "draft")
尝试2:找到项目,然后删除所有内容
foreach (var item in products)
{
if (item.status == "draft")
{
products.Remove(item);
}
}
productsListView.FlowItemsSource = products;
这样做的正确方法是什么?
答案 0 :(得分:2)
怎么样
productsListView.FlowItemsSource = products.Where(p => p.status!=“草稿”);
这行吗?
答案 1 :(得分:2)
我对显示草稿产品的API有问题。因此,我的解决方案是...删除任何草稿产品。
不确定您想要什么。您只想显示起草的产品吗?还是要显示所有非草稿产品?也许您想从原始清单中删除起草的产品?
仅显示起草的产品
var draftedProducts = products.Where(product => product.Status == "draft);
换句话说:从产品的原始顺序开始,请确保其属性状态值等于“草稿”的产品
如果遵循以下约定,通常更容易理解:序列(集合,列表,数组)是复数名词。序列的元素是单数名词。 =>
之前的部分代表序列的一个元素,=>
之后的部分代表对序列的元素起作用的表达式
仅显示未起草的产品
如果您了解上一尝试,则不会难于理解:
var nonDraftedProducts = products.Where(product => product.Status != "draft);
从原始收藏中删除起草的产品
重要的是要理解:LINQ永远不会改变您的输入序列。 LINQ不会在输入序列中添加或删除项目,也不会更改任何属性。
如果要从输入序列中删除项目,则必须遍历LINQ结果并删除项目。
var draftedProducts = products.Where(product => product.Status == "draft).ToList();
foreach (var draftedProduct in draftedProducts)
{
products.Remove(draftedProduct);
}
或将其从数据库中删除:
using (var dbContext = new ProductsDbContext)
{
var draftedProducts = dbContext.Products
.Where(product => product.Status == "draft)
.ToList();
dbContext.Products.RemoveRange(draftedProducts);
}
或者,如果您使用SQL访问产品:
var allProducts = myDatabase.GetAllProducts();
var draftedProducts = dbContext.Products
.Where(product => product.Status == "draft)
.ToList();
foreach (var draftedProduct in draftedProducts)
{
myDatabase.RemoveProduct(draftedProduct);
}