gpt4 book ai didi

c# - 包含 "filter"的 CONTAINS 方法的 LINQ 语法

转载 作者:行者123 更新时间:2023-11-30 16:31:42 25 4
gpt4 key购买 nike

这可能看起来有点“多”,但这是在挑剔我!

设想一个带有 CheckBoxList 的表单,该表单充当用户的包容性过滤器。

该用户填写表格,在过滤器中勾选他们想要的项目,然后离开。

我正在寻找一种简洁的方法来编写以下 LINQ 语句:

如果没有项目被选中,显示所有结果别的显示按用户选择过滤的结果

是否可以(如果可以,如何)在不使用条件语句的情况下编写此代码,该条件语句基本上是相同的查询,但没有 Contains 方法?

我尝试在我的 Where 子句中放置一个三元运算符,但编译器根本不喜欢它。

System.Collections.Generic.List catIds = new System.Collections.Generic.List();

              foreach (ListItem lstItemCategory in lstCategories.Items)
{
if (lstItemCategory.Selected)
{
catIds.Add(Convert.ToInt64(lstItemCategory.Value));
}
}

var qry = from rategroup in rategroups
from rate in rategroup.Rates
orderby rate.RateClass.Id descending
select new
{
Category = rate.Product.ProductCategories[0].Category.Description,
rate.Product.Description,
Carrier = rate.CarrierName,
Id = rate.Product.ProductCategories[0].Id
};


this.gvSchedule.DataSource = qry.Where(x => catIds.Contains(x.Id)).OrderBy(x => x.Category).ThenBy(x => x.Carrier).ToArray();
this.gvSchedule.DataBind();

最佳答案

为什么不这样做:

var filteredQry = catIds.Any() ? qry.Where(x => catIds.Contains(x.Id)) : qry;
this.gvSchedule.DataSource = filteredQry.OrderBy(x => x.Category)
.ThenBy(x => x.Carrier)
.ToArray();

或者:

if(catIds.Any())
qry = qry.Where(x => catIds.Contains(x.Id));

this.gvSchedule.DataSource = qry.OrderBy(x => x.Category)
.ThenBy(x => x.Carrier)
.ToArray();

您也可以尝试使用 Expression<Func<Foo, bool>>过滤并根据条件将其分配给“始终为真”谓词或真正的过滤器,但这会有些困难,因为涉及匿名类型。

关于c# - 包含 "filter"的 CONTAINS 方法的 LINQ 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4728655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com