在数据表上使用 LINQ 进行内联接

Ahm*_*mad 1 c# linq inner-join

我有这 2 个数据表,customerTableDT并且customerAliasesTableDT. 它们都是从数据库中填充的,如下所示:

customerTableDT = UtilityDataAndFunctions.PerformDBReadTransactionDataTableFormat(String.Format("SELECT * FROM {0}", TableNames.customers));

customerAliasesTableDT = UtilityDataAndFunctions.PerformDBReadTransactionDataTableFormat(String.Format("SELECT * FROM {0}", TableNames.customerAliases));
Run Code Online (Sandbox Code Playgroud)

现在我尝试对两个数据表进行内部联接,如下所示:

var customerNames = from customers in customerTableDT.AsEnumerable()
                    join aliases in customerAliasesTableDT.AsEnumerable on customers.Field<int>("CustomerID") equals aliases.Field<int>("CustomerID")
                    where aliases.Field<string>("Alias").Contains(iString) select customers.Field<string>("Name")
Run Code Online (Sandbox Code Playgroud)

但它给了我这个错误:

The type of one of the expressions in the join clause is incorrect.  Type inference failed in the call to 'Join'.
Run Code Online (Sandbox Code Playgroud)

如果我必须用 SQL 编写我想要做的事情,那么它非常简单:

SELECT * FROM CUSTOMERS C
INNER JOIN CustomerAliases ALIASES ON ALIASES.CustomerID = C.CustomerID
WHERE CA.Alias LIKE %STRING_HERE%
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

Mar*_*zek 5

您错过了后面的括号AsEnumerable,因此它被视为方法组,而不是IEnumerable<DataRow>

var customerNames = from customers in customerTableDT.AsEnumerable()
                    join aliases in customerAliasesTableDT.AsEnumerable() on customers.Field<int>("CustomerID") equals aliases.Field<int>("CustomerID")
                    where aliases.Field<string>("Alias").Contains(iString) select customers.Field<string>("Name")
Run Code Online (Sandbox Code Playgroud)