【问题标题】:Linq syntax ContainsLinq 语法包含
【发布时间】:2014-10-10 05:26:25
【问题描述】:

Linq 语法

有一个标签表:数据包含tagName狗、狗、猫

1 string[] test1 = new[] { "dogs", "dog" };

比较 test1 和标签表并返回不在 test1 结果中的标签列表:cat

var item1= Tags.Where(x => !test1.Contains(x.TagName)).ToList();

结果“猫”正确

  1. string[] test2 = new[] { "dogs", "dog", "cat", "bird" };

如何比较 test2 和 tag table 并返回在 test2 结果中找到的新项目应该是鸟。

var item2= test2.Where(x => !Tags.Contains(test2)).ToList(); XX fails here?

谢谢,

【问题讨论】:

  • 你试过用Except方法吗?
  • 你的问题不太清楚,你到底想达到什么目的
  • "XX 在这里失败了?"失败是什么意思?
  • 语法失败,无法编译。我想将 test2 值与标签表值进行比较。想要返回在 test2 字符串数组中找到的所有新项目。

标签: c# linq


【解决方案1】:

使用Except:

            //Datasource
            string[] Tags = { "dogs", "dog", "cat" };
            string[] test2 = new[] { "dogs", "dog", "cat", "bird" };

            var result = test2.Except(Tags);

如果你真的对使用 Contains 感兴趣,那么你可以这样做:-

var result = test2.Where(x => !Tags.Contains(x));

【讨论】:

  • 如果我使用包含您提供的语法,它会给我一个编译错误“无法从字符串转换为 Models.Tags?标签是一个表格,有什么想法吗?
  • 您需要显示“标签”的类型。在我的例子中,我使用字符串数组作为我的数据源,因此 Contains 需要一个字符串值进行比较(x 是循环中 test2 数组的值)。您的代码的问题是您直接传递表“标签”而不是要比较的属性。请传递保存数据的标签表中的实际属性。
  • 感谢您的解释!
【解决方案2】:

你可以使用Any():

var item2= test2.Where(x => Tags.Any(t=> !t.Contains(x))).ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-14
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    相关资源
    最近更新 更多