C# 如何对多个条件使用动态LINQ连接扩展方法

C# 如何对多个条件使用动态LINQ连接扩展方法,c#,linq,join,dynamic-linq,multiple-conditions,C#,Linq,Join,Dynamic Linq,Multiple Conditions,我正在尝试测试一个动态连接扩展方法,该方法定义为在多种条件下连接两个数据集(dataset1和dataset2)。我的加入条件如下所示 outerSelector = "new ( dataset1.ToBeReconciled as col1, dataset1.TransactionDate as col2)"; innerSelector = "new ( dataset2.ToBeReconciled as col1, dataset2.TransactionDate as co

我正在尝试测试一个动态连接扩展方法,该方法定义为在多种条件下连接两个数据集(dataset1和dataset2)。我的加入条件如下所示

    outerSelector = "new ( dataset1.ToBeReconciled as col1, dataset1.TransactionDate as col2)";
innerSelector = "new ( dataset2.ToBeReconciled as col1, dataset2.TransactionDate as col2)";
这不会导致任何错误,但同时始终返回零记录,即使我有符合此条件的记录


你知道怎么做吗?谢谢

也许你应该从一个简单的例子开始,然后试着解决你的问题。。。我在下面写了一篇简单易懂的文章

void Main()
{
    var fruits = new List<Fruit>
    {
        new Fruit{ GroceryId = 1,Name = "Apple", ProductId = 1},
        new Fruit{ GroceryId = 1,Name = "Orange", ProductId = 2},
    };

    var groceries = new List<Grocery>
    {
        new Grocery { GroceryId = 1, Name = "Fruits and Vegetables" },
        new Grocery { GroceryId = 2, Name = "Drinks and snacks" },
    };

    var joinedResults = fruits.Join(groceries, // References the groceries declared above,
                                    fruit => fruit.GroceryId,  // Join by GroceryId located on the Fruit
                                    grocery => grocery.GroceryId,  // Join by the GroceryID located on Grocery 
                                    (product, grocery) => new 
                                    {
                                        ProductId = product.ProductId, 
                                        ProductName = product.Name, 
                                        GroceryName = grocery.Name
                                    });
}
public class Fruit
{
    public int ProductId { get; set; }
    public int GroceryId { get; set; }
    public string Name { get; set; }
}

public class Grocery
{
    public int GroceryId { get; set; }
    public string Name { get; set; }
}
void Main()
{
var=新列表
{
新水果{GroceryId=1,Name=“Apple”,ProductId=1},
新水果{GroceryId=1,Name=“Orange”,ProductId=2},
};
var groceries=新列表
{
新杂货店{GroceryId=1,Name=“水果和蔬菜”},
新杂货店{GroceryId=2,Name=“饮料和零食”},
};
var joinedResults=fruits.Join(groceries,//引用上面声明的groceries,
水果=>fruit.GroceryId,//通过位于水果上的GroceryId加入
grocery=>grocery.GroceryId,//通过位于grocery上的GroceryId加入
(产品、杂货店)=>新
{
ProductId=product.ProductId,
ProductName=product.Name,
GroceryName=杂货店。名称
});
}
公共级水果
{
public int ProductId{get;set;}
公共int GroceryId{get;set;}
公共字符串名称{get;set;}
}
公营杂货店
{
公共int GroceryId{get;set;}
公共字符串名称{get;set;}
}

也许你应该从一个简单的例子开始,然后试着解决你的问题。。。我在下面写了一篇简单易懂的文章

void Main()
{
    var fruits = new List<Fruit>
    {
        new Fruit{ GroceryId = 1,Name = "Apple", ProductId = 1},
        new Fruit{ GroceryId = 1,Name = "Orange", ProductId = 2},
    };

    var groceries = new List<Grocery>
    {
        new Grocery { GroceryId = 1, Name = "Fruits and Vegetables" },
        new Grocery { GroceryId = 2, Name = "Drinks and snacks" },
    };

    var joinedResults = fruits.Join(groceries, // References the groceries declared above,
                                    fruit => fruit.GroceryId,  // Join by GroceryId located on the Fruit
                                    grocery => grocery.GroceryId,  // Join by the GroceryID located on Grocery 
                                    (product, grocery) => new 
                                    {
                                        ProductId = product.ProductId, 
                                        ProductName = product.Name, 
                                        GroceryName = grocery.Name
                                    });
}
public class Fruit
{
    public int ProductId { get; set; }
    public int GroceryId { get; set; }
    public string Name { get; set; }
}

public class Grocery
{
    public int GroceryId { get; set; }
    public string Name { get; set; }
}
void Main()
{
var=新列表
{
新水果{GroceryId=1,Name=“Apple”,ProductId=1},
新水果{GroceryId=1,Name=“Orange”,ProductId=2},
};
var groceries=新列表
{
新杂货店{GroceryId=1,Name=“水果和蔬菜”},
新杂货店{GroceryId=2,Name=“饮料和零食”},
};
var joinedResults=fruits.Join(groceries,//引用上面声明的groceries,
水果=>fruit.GroceryId,//通过位于水果上的GroceryId加入
grocery=>grocery.GroceryId,//通过位于grocery上的GroceryId加入
(产品、杂货店)=>新
{
ProductId=product.ProductId,
ProductName=product.Name,
GroceryName=杂货店。名称
});
}
公共级水果
{
public int ProductId{get;set;}
公共int GroceryId{get;set;}
公共字符串名称{get;set;}
}
公营杂货店
{
公共int GroceryId{get;set;}
公共字符串名称{get;set;}
}

简单的方法很好,但我的要求是我需要多个连接条件。并且在多个连接上连接不起作用。那么是什么阻止您在前一个连接语句的末尾添加另一个连接语句呢?没有。它编译得很好。但它不起作用。它总是声明“枚举未产生结果”,即使有与联接条件匹配的记录。简单的一个很好,但我的要求是联接需要多个条件。并且在多个连接上连接不起作用。那么是什么阻止您在前一个连接语句的末尾添加另一个连接语句呢?没有。它编译得很好。但它不起作用。它始终声明“枚举未产生任何结果”,即使存在与联接条件匹配的记录。