添加查询到linq var

时间:2014-02-15 08:59:43

标签: c# linq

我之前从未使用过这个。我需要在查询中添加另一个成员。如何添加"链接"来源"?

 var titles = regexTitles.Matches(pageContent).Cast<Match>();
 var dates = regexDate.Matches(pageContent).Cast<Match>();
 var link = regexLink.Matches(pageContent).Cast<Match>();

  var source = titles.Zip(dates, (t, d) => new { Title = t, Date = d });

    foreach (var item in source)
    {
      var articleTitle = item.Title.Groups[1].Value;
      var articleDate = item.Date.Groups[1].Value;
      //var articleLink = item.Link.Groups[1].Value;

      Console.WriteLine(articleTitle);
      Console.WriteLine(articleDate);
      //Console.WriteLine(articleLink);
      Console.WriteLine("");
      }
    Console.ReadLine();

2 个答案:

答案 0 :(得分:2)

听起来你需要另一个电话Zip。第一个电话会将标题和日期配对,第二个电话会将标题/日期对与链接配对:

var source = titles.Zip(dates, (t, d) => new { t, d })
                   .Zip(link, (td, l) => new { Title = td.t,
                                               Date = td.d,
                                               Link = l });

或(等效地,仅使用投影初始化器):

var source = titles.Zip(dates, (Title, Date) => new { Title, Date })
                   .Zip(link, (td, Link) => new { td.Title, td.Date, Link });

(我有时候认为让Zip有两个重载需要另外几个重载才能获得三个或四个序列...这不会太难。也许我会将它们添加到{{3 }):)

答案 1 :(得分:2)

您可以再次轻松使用Zip,如下面的代码所示:

var source = titles.Zip(dates, (t, d) => new { Title = t, Date = d });
                   .Zip(link, (d, l) => new { Title = d.Title, 
                                              Date = d.Date, 
                                              Link= l });