【问题标题】:Can Linq be used to find if value matches part of a larger string?可以使用 Linq 来查找值是否与较大字符串的一部分匹配?
【发布时间】:2013-12-17 20:53:14
【问题描述】:

我已经使用 linq 研究了 RegEx 和 SQLMatch,但似乎找不到适合我情况的规则。我想要创造的是..

//dataCollected[0] = { Name="joe", Url="http://my.home.site/" }
//dataCollected[N] = { Name="example", Url="http://german.home.site/" }

public bool hasParent(string test_url){
    var obj = dataCollected.Where(s => ( test_url.contains(s.Url)));
    return obj.Count() > 0;
}

bool  result  = hasParent("http://my.home.site/ShouldBeTrue"); //Finds http://my.home.site/

【问题讨论】:

    标签: c# regex linq


    【解决方案1】:

    你快到了,它应该是相反的。另外,使用 LINQ Any。如果找到任何匹配项,这将返回 true:

    public bool hasParent(string test_url)
    {
        return dataCollected.Any(s => test_url.Contains(s.url));
    }
    

    【讨论】:

    • 应该是s.Url.Contains(test_url)
    • 我认为@TheGreatCO 弄错了,你第一次就做对了。目前,您的代码将为示例调用返回 false。
    • 应该指出,这个 LINQ 会在找到第一个结果后立即返回,所以最坏的情况是它必须扫描所有项目,而不是总是扫描所有项目每次。
    • 只有当 dataCollected 中的 Url 是相等或更大的字符串时才会如此。当 s.url = "my.site.home" & test_url ="my.site.home.edu/questions"
    • @AshBurlaczenko 你确定吗?因为 test_url 是一个字符串,而 dataCollected 是一个对象数组。所以 .Contains 应该应用于对象的字符串成员,而不是对象本身。
    猜你喜欢
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多