C# 试图一次搜索2个数组,并打印出任何匹配的信息

C# 试图一次搜索2个数组,并打印出任何匹配的信息,c#,C#,我有一个搜索方法,它试图将一个控制器名称与一个和/或两个数组中的条目相匹配。但是,如果导演在其中一个数组中有多部电影,我无法确定如何打印多个标题的名称 现在,我的代码如下所示: if (director == myDVDs[i].Director || director == myBlu[i].Director) { Console.WriteLine("{0}: {1}", i + 1, myBlu[i].Title); EndOptions(); } else if (d

我有一个搜索方法,它试图将一个控制器名称与一个和/或两个数组中的条目相匹配。但是,如果导演在其中一个数组中有多部电影,我无法确定如何打印多个标题的名称

现在,我的代码如下所示:

if (director == myDVDs[i].Director || director == myBlu[i].Director)
{
    Console.WriteLine("{0}: {1}", i + 1, myBlu[i].Title);

    EndOptions();

}
else if (director != myDVDs[i].Director && director != myBlu[i].Director)
{
    Console.WriteLine("{0} does not have a movie in the database try again",     director);
    Console.Clear();
    Search();
}
var matching = myDVDs.Concat(myBlu).Where(d => d.Director == director);
int count = 1;
foreach (var m in matching) {
    Console.WriteLine("{0}: {1}", count++, m.Title);
}

您可以使用LINQ的
Concat
,如下所示:

if (director == myDVDs[i].Director || director == myBlu[i].Director)
{
    Console.WriteLine("{0}: {1}", i + 1, myBlu[i].Title);

    EndOptions();

}
else if (director != myDVDs[i].Director && director != myBlu[i].Director)
{
    Console.WriteLine("{0} does not have a movie in the database try again",     director);
    Console.Clear();
    Search();
}
var matching = myDVDs.Concat(myBlu).Where(d => d.Director == director);
int count = 1;
foreach (var m in matching) {
    Console.WriteLine("{0}: {1}", count++, m.Title);
}

通用解决方案,可简化添加新电影类型。要查找LINQ使用的标题,您可能需要使用System.LINQ添加
,以使用以下方法:

var dvds = new List<IMovie>
           {
              new DvdMovie {Title = "DVD1", Director = "Director1"},
              new DvdMovie {Title = "DVD2", Director = "Director1"},
              new DvdMovie {Title = "DVD3", Director = "Director2"}
           };

var bluerays = new List<IMovie>
           {
               new BlueRayMovie {Title = "BR1", Director = "Director3"},
               new BlueRayMovie {Title = "BR2", Director = "Director3"},
               new BlueRayMovie {Title = "BR3", Director = "Director1"}
           };

var allMovies = new List<IEnumerable<IMovie>> {dvds, bluerays};
string searchFor = "Director1";

// Main query, all other initialization code and types are below
IEnumerable<string> titles = allMovies.SelectMany(l => 
    l.Where(sl => sl.Director == searchFor)
    .Select(m => m.Title));

if (titles != null && titles.Count() > 0)
{
    // OUTPUTs: DVD1, DVD2, BR3
    foreach (var title in titles)
    {
       Console.WriteLine(title);
    }
}
else
{
    Console.WriteLine("Nothing found for " + searchFor);
}

是的,对我来说也是一样,也许是
Join()
?@AlexeiLevenkov我对这个问题的理解是,他把DVD和Blurays放在不同的阵列中,他在寻找某个导演制作的所有片子。他不是在董事会上加入他们,只是在搜索两个独立的、类型相同的项目集合。@abatishchev我想他是在搜索两个相互独立、不应该加入的集合。碰巧它们都包含电影,但除此之外没有要加入的关系。@dasblinkenlight他们不认为您的答案是错误的,但是Concatenate()方法不存在,可能您的意思是Concat()。+1。如果数组中的元素类型相同,Concat是最简单的解决方案。
myDVDs
myBlu
是否有某种关联?或者它们只是包含电影的列表?换句话说,
myDVDs[0]。Title==myBlu[0]。Title
-对还是错?两者兼而有之。它的设置方式是,DVD只有一张DVD,但bluray有一个bluray实体和一个DVD实体,所以当你添加bluray时,你也添加了一张DVD,我算出了,谢谢大家