LinQ 根据状态删除产品



所以我在显示草稿产品的 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"(;

这行得通吗?

最新更新