var listOne = new string[] { "dog", "cat", "car", "apple"};
var listTwo = new string[] { "car", "apple"};
我需要的是按listTwo中的项目顺序(如果存在)订购listOne。所以新的清单将按此顺序排列; “汽车”,“苹果”,“狗”,“猫”
我想在LINQ中这样做并尝试过这个;
var newList = from l1 in listOne
join l2 in listTwo on l1 equals l2 in temp
from nl temp.DefaultIfEmpty()
select nl;
但它返回null,显然我的Linq-Fu很弱。任何建议表示赞赏。
答案 0 :(得分:4)
您需要listOne中listTne中的所有项目,然后是listOne中的其余项目吗?
var results = listTwo.Intersect(listOne).Union(listOne);
foreach (string r in results)
{
Console.WriteLine(r);
}
答案 1 :(得分:3)
好吧,让我改一下你的排序要求:
这段代码可以解决问题:
void Main()
{
var listOne = new string[] { "dog", "cat", "car", "apple"};
var listTwo = new string[] { "car", "apple"};
var elements1 =
from element in listTwo
where listOne.Contains(element)
select element;
var elements2 =
from element in listOne
where !listTwo.Contains(element)
select element;
elements1.Concat(elements2).Dump();
}
你也可以在没有LINQ语法的情况下重写它,使其缩短一点:
void Main()
{
var listOne = new string[] { "dog", "cat", "car", "apple"};
var listTwo = new string[] { "car", "apple"};
var elements = listTwo.Where(e => listOne.Contains(e))
.Concat(listOne.Where(e => !listTwo.Contains(e)));
elements.Dump();
}
输出(通过LINQPad):
car
apple
dog
cat