代码之家  ›  专栏  ›  技术社区  ›  Bryan Dellinger

C LINQ连接多个具有不同名称的属性

  •  0
  • Bryan Dellinger  · 技术社区  · 6 年前

    尝试在两个属性上执行LINQ联接,这些属性具有不同的名称。

    join子句中某个表达式的类型不正确 类型推理在调用join时失败

    这是小提琴 https://dotnetfiddle.net/xKg9mB

    这是密码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    namespace linq2
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<MyClass1> list1 = new List<MyClass1>() { new MyClass1() { thing1 = "hello", thing2 = "world" } };
                List<MyClass2> list2 = new List<MyClass2>() { new MyClass2() { thing3 = "hello", thing4 = "world" } };
    
                var bothLists = from l1 in list1
                                join l2 in list2 on new { l1.thing1, l1.thing2 } equals new { l2.thing3, l2.thing4 }
                                select new
                                {
                                    thing1 = l1.thing1,
                                    thing2 = l1.thing2
                                };
    
                Console.WriteLine("Hello World!");
            }
        }
    
        public class MyClass1
        {
            public string thing1 { get; set; }
            public string thing2 { get; set; }
        }
    
        public class MyClass2
        {
            public string thing3 { get; set; }
            public string thing4 { get; set; }
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Zack ISSOIR    6 年前

    您可以这样重命名联接表达式中的属性:

    from l1 in list1
    join l2 in list2 on new { a = l1.thing1, b = l1.thing2 } equals new { a= l2.thing3, b = l2.thing4 }
    select new
    {
          thing1 = l1.thing1,
          thing2 = l1.thing2
     };
    

    这将解决问题。