C# 将if子句合并到linq中

C# 将if子句合并到linq中,c#,asp.net,linq,C#,Asp.net,Linq,我正在开发一个函数,它读取文本文件中的URL,更新链接,然后将数据写回 读完这行后,我找到第三个“/”,从链接中切掉剩余的字符,然后将列表区分开来。理论上,这应该是一个子域列表 但是,我想检查该行是否不是空的,是否存在第三个“/”。如果不是,IndexofNth将返回-1 我正在努力找出如何最好地将这种逻辑整合到我所拥有的东西中,或者整合到一个不同的结构中 protected void Page_Load(object sender, EventArgs e) {

我正在开发一个函数,它读取文本文件中的URL,更新链接,然后将数据写回

读完这行后,我找到第三个“/”,从链接中切掉剩余的字符,然后将列表区分开来。理论上,这应该是一个子域列表

但是,我想检查该行是否不是空的,是否存在第三个“/”。如果不是,IndexofNth将返回-1

我正在努力找出如何最好地将这种逻辑整合到我所拥有的东西中,或者整合到一个不同的结构中

    protected void Page_Load(object sender, EventArgs e)
    {
        var fileName = @"c:\badlinks.txt";

        List<string> urls = File.ReadAllLines(fileName).ToList();

        urls = urls
            .Select(x =>
                x.Replace(x, x.Substring(0, IndexOfNth(x, '/', 3))))
                .Distinct()
                .ToList();

        File.WriteAllLines(fileName, urls);
    }
受保护的无效页面加载(对象发送方,事件参数e)
{
var fileName=@“c:\badlinks.txt”;
List url=File.ReadAllLines(fileName.ToList();
URL=URL
.选择(x=>
x、 替换(x,x.Substring(0,IndexOfNth(x,“/”,3)))
.Distinct()
.ToList();
writeAllines(文件名、URL);
}

提前感谢。

在进行字符串输入之前过滤列表

urls = urls
        .Where(x => x.Length > 0)
        .Select(x => x.Substring(0, IndexOfNth(x, '/', 3) > -1 ? x.Replace(x, x.Substring(0, IndexOfNth(x, '/', 3)))  : x)
            .Distinct()
            .ToList();
将逻辑转移到新方法以保持代码干净是一个明智的想法

    urls = urls
        .Where(x => x.Length > 0)
        .Select(x => ManinpulateMyUrl(x))
            .Distinct()
            .ToList();


    private string ManipulateMyUrl(string url) {
      var index = IndexOfNth(x, '/', 3);
      if (index == -1) return url;
      return url.Substring(0, IndexOfNth(x, '/', 3);
    }
这应该会有所帮助

urls = urls
       .Where(x => !string.IsNullOrWhiteSpace(x))
       .Select(x =>IndexOfNth(x, '/', 3)<0?
                   x:
                   x.Replace(x, x.Substring(0, IndexOfNth(x, '/', 3))))
       .Distinct()
       .ToList();
url=url
.Where(x=>!string.IsNullOrWhiteSpace(x))

.选择(x=>IndexOfNth(x,“/”,3)您想筛选不为null且至少有三个
/
的项目,或者您想对每个项目执行
if else
操作?如果行为空,我们无法对其执行任何操作,因此希望忽略它,如果没有第三个/,则它已经是子域,而不是内部页面,因此我们希望保留原始的stringIf
IndexOfNth
是一个自定义方法,Linq不会执行它。它无法将它解析为Sql。@AndreiV
文件。ReadAllLines
不是Sql操作。@Mathew,我没有说过
文件。ReadAllLines
@Marko JuvančIč-Marko,不太清楚。这是我在上面发布的解释:如果这行是空的,我们就不能用它做任何事情,所以我想这样做忽略它,如果没有3rd/,那么它已经是一个子域,而不是一个内部页面,所以我们希望保留原始字符串。不管怎样,伙计们,它按原样工作,只是不做所有需要的事情。
urls = urls
       .Where(x => !string.IsNullOrWhiteSpace(x))
       .Select(x =>IndexOfNth(x, '/', 3)<0?
                   x:
                   x.Replace(x, x.Substring(0, IndexOfNth(x, '/', 3))))
       .Distinct()
       .ToList();