【问题标题】:LINQ ALL Method only works when there is one condition to checkLINQ ALL 方法仅在需要检查一个条件时才有效
【发布时间】:2015-06-26 07:29:17
【问题描述】:

我有一个Dictionary<string, string>,其中包含一些需要对照DataTable 进行检查的条件。

例如如果 dic 包含一个条目,如(键:“Email”,值:“john.smith@gmail.com”),则以下必须搜索 DataTable 中具有等于“john.smith”的值的所有行@gmail.com”。

var foundRows = dtContacts.AsEnumerable()
    .Where(c => dicConditions.All(kv => c.Field<string>(kv.Key) == kv.Value.ToString()));

当我们在字典中只有一个条件时,这是有效的。但我希望它也能在更多条件下工作。

例如,我现在要为 FirstName 的值为“John”且 LastName 的值为“Smith”的每个人检查 DataTable(不区分大小写)。尽管我可以看到我的DataTable 中有一行 FirstName = "John" 和 LastName = "Smith",但上面的 LINQ 没有返回任何值.

我做错了什么?

【问题讨论】:

  • 请展示一个简短但完整的程序来说明问题。 (不知道你为什么在kv.Value上打电话给ToString,顺便说一句。)
  • 不可能...All 空的IEnumerable 返回true。即使写在MSDNtrue如果源序列的每个元素都通过指定谓词中的测试,或者如果序列为空;
  • 如何使字符串比较不区分大小写?在那个例子中看起来没有完成。这是你的问题吗?它实际上是在做区分大小写的检查吗?
  • @evilbhonda 不,我的目标是这样做,但我想做的第一件事是进行完全匹配。接下来是。

标签: c# linq dictionary datatable


【解决方案1】:

这也适用于多个条件(字典中的条目)。

所以我唯一想到的是它目前区分大小写,但您明确要求不区分大小写的方法:

var foundRows = dtContacts.AsEnumerable()
    .Where(row => dicConditions
        .All(kv => String.Equals(row.Field<string>(kv.Key), kv.Value, StringComparison.InvariantCultureIgnoreCase)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 2015-03-23
    • 2014-05-31
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多