如何从C#中的两个List <String>获取移动组合?

Tho*_*eld 6 c# linq lambda

我有两个List<String>包含

ListOne
          A
          B
          C
ListTwo
          A
          B
          C
          D
Run Code Online (Sandbox Code Playgroud)

现在我需要将移动组合转换为列表字符串

所以输出列表将包含

         A-B
         A-C
         A-D
         B-C
         B-D
         C-D
Run Code Online (Sandbox Code Playgroud)

现在我正在使用Nested for loop它.?有没有办法使用LINQLAMBDA EXPRESSION 请帮助我这样做.提前致谢

示例代码

List<String> ListOne = new List<string> { "A","B","C"};
List<String> ListTwo = new List<string> { "A", "B", "C", "D" };

List<String> Result = new List<string>(from X in ListOne 
                                       from Y in ListTwo 
                                       where X!=Y
                                        select string.Format("{0}-{1}", X, Y));
Run Code Online (Sandbox Code Playgroud)

但它没有给出正确的输出

  It produces like

            A-B
            A-C
            A-D
            B-A
            B-C
            B-D
            C-A
            C-B
            C-D
Run Code Online (Sandbox Code Playgroud)

但是所需的输出就像

         A-B
         A-C
         A-D
         B-C
         B-D
         C-D
Run Code Online (Sandbox Code Playgroud)

示例代码使用 For Loop

List<String> ResultTwo = new List<string>();
        for (int i = 0; i < ListOne.Count; i++)
        {
            for (int j = 0; j < ListTwo.Count; j++)
            {
                if(ListOne[i] != ListTwo[j])
                    if (ResultTwo.Contains(ListOne[i] + "-" + ListTwo[j]) == false && ResultTwo.Contains(ListTwo[j] + "-" + ListOne[i]) == false) 
                ResultTwo.Add(ListOne[i] + "-" + ListTwo[j]);
            }
        }
Run Code Online (Sandbox Code Playgroud)

它的工作正常....但我只需要一个简单的方法(使用LINQ)

nan*_*nan 8

在你的编辑后,这应该做的伎俩:

List<string> ListOne = new List<string>(){"A","B","C"};
List<string> ListTwo = new List<string>(){ "A","B","C","D"};

var result = from a in ListOne
             from b in ListTwo
             let condition = a.CompareTo(b)
             where condition != 0
             select condition < 0 ? a + "-" + b : b + "-" + a;


foreach (var v in result.Distinct())
{
    Console.WriteLine(v);
}
Run Code Online (Sandbox Code Playgroud)

保留顺序的第二个版本(ItemFromList1 - ItemFromList2):

        var result =
            from o in
                (
                    from a in ListOne
                    from b in ListTwo
                    let condition = a.CompareTo(b)
                    where condition != 0
                    select new { a, b, condition }
                )
                group o by
                    o.condition < 0 ? o.a + "-" + o.b : o.b + "-" + o.a into g
                select g.Select(n => n.a + "-" + n.b).Take(1).ToArray()[0];
Run Code Online (Sandbox Code Playgroud)