所以我在显示草稿产品的 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;
正确的方法是什么?
我在显示草稿产品的 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);
}
怎么样
产品列表视图.流项目源 = 产品。其中(p => p.status != "draft"(;
这行得通吗?