c# - LINQ:根据属性比较两个列表并返回符合特定条件的项目

标签 c# linq list windows-phone-8

假设我有两个列表 List<NewTile>List<OldTile> . List<OldTile>总是包含比 List<NewTile> 更多的项目.

public class NewTile
{
    public Uri Navigation { get; set; }
    public string Info { get; set; }    
}

public class OldTile
{
    public String Scheme { get; set; }
    public string Status { get; set; }    
}

Navigation属性始终包含 Scheme例如字符串。这就是项目在这两个列表之间的关联方式。

Scheme = "wikipedia"
Navigation = "/Pages/BlankPage.xaml?Scheme=wikipedia"

我想从 List<NewTile> 中获取所有项目他们的导航属性与其中任何一个都不匹配 Scheme来自 List<OldTile> 的字符串.我如何使用 LINQ 执行此操作?

最佳答案

您可以使用 Where + AnyHttpUtility.ParseQueryString 检查查询字符串是否与 链接方案:

var newNotInOld = newTiles
    .Where(nt => !oldTiles
        .Any(ot => ot.Scheme.Equals(HttpUtility.ParseQueryString(nt.Navigation.ToString())["Scheme"], StringComparison.InvariantCultureIgnoreCase)));

您需要添加using System.Linqusing System.Web

由于您使用的是 Windows Phone,因此您没有 HttpUtility.ParseQueryString。所以可以尝试这种方法:http://dotnetautor.de/blog/2012/06/25/WindowsPhoneParseQueryString.aspx

除此之外,您还可以使用字符串方法或正则表达式。例如:

 var newNotInOld = newTiles
  .Where(nt => !oldTiles
    .Any(ot => {
       string url = nt.Navigation.ToString();
       int index = url.IndexOf('?');
       bool containsScheme = false;
       if (index >= 0)
       {
           string queryString = url.Substring(++index);
           containsScheme = queryString.Split('&')
             .Any(p => p.Split('=')[0].Equals("Scheme", StringComparison.InvariantCulture) 
                    && p.Split('=').Last().Equals(ot.Scheme, StringComparison.InvariantCultureIgnoreCase));
       }
       return containsScheme;
   }));

关于c# - LINQ:根据属性比较两个列表并返回符合特定条件的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23605384/

相关文章:

c# - 为什么 ReactiveUI 依赖旧版本的 System.Reactive?

c# - 使用共享 IP 地址从 IIS 站点发出出站 Web 请求时失败

c# - 如何将 ReadLine 循环重构为 Linq

list - 序言初学者 : Reverse List only once

c# - ASP.NET MVC5 在 View 中的标签中显示异常错误消息可能吗?

c# - 配置等待和性能

c# - 从 XML 中选择特定元素

c# - Lambda 表达式不正确 - 需要返回一个 bool Func

python - 如何优化列表操作? (代码之战)

java - 奇怪的行为: Java Comparator randomizes list entries