【问题标题】:C# Filtering List - More Than One ConditionC# 过滤列表 - 多个条件
【发布时间】:2013-07-21 02:04:39
【问题描述】:

我有一个名为melter的自定义数据类型列表。

melter 中与过滤器有关的两件事是:

  • 已删除
  • 描述

我这样获取/声明我的列表:

            // Return all the melters
        var melterslist = ServiceManager.ListStandingDataValues(StandingDataType.melters);

        var meltersActive = new List<IMelters>();

        foreach (var m in melterslist)
        {
            if (m.Deleted == false && m.desc.ToUpper().Contains(input))
            {
                meltersActive.Add(m);
            }
        }

        var json = new { MelterNames = new List<object>() };

        foreach (var m in meltersActive)
        {
            json.meltersNames.Add(
                    new
                    {
                        Name = m.Description,
                        Value = m.Id
                    }
                );
        }

        return json;

但我认为对upper 和contains 进行操作会花费我很多处理时间,因为列表大小> 1000。

然后每次我认为也杀死它时将其转换为 JSON。

在 jQuery 自动完成字段中使用 JSON 时,每分钟可以点击 3/4 次。

谁能推荐一种更好的方法,即 LINQ 查询?

谢谢

【问题讨论】:

  • 你在StringComparison.InvariantCultureIgnoreCase之后吗? 编辑meltersList.Where(m =&gt; !m.Deleted...
  • 是的,从某种意义上说,但更多的是寻找关于整个字符串比较和转换为 JSON 的最佳优化方式的建议
  • 抱歉,没有Visual Studio很难做例子

标签: c# string list optimization filter


【解决方案1】:

在 LINQ 中,您可以通过以下方式实现:

meltersActive = (from melter in melterslist
                 where m.Deleted && m.desc.IndexOf(input, StringComparison.InvariantCultureIgnoreCase) != -1
                 select new
                 {
                     Name = m.Description,
                     Value = m.Id
                 });

对于第二个条件(不区分大小写的Contains),请查看Case insensitive 'Contains(string)'Microsoft Connect

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2021-08-02
    • 1970-01-01
    • 2016-11-16
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多