Linq加入2个表,列名不同,但列中的值在两个表中都相同

时间:2014-07-31 15:06:28

标签: c# sql database linq

在这里,我有2个表“enrollcustomers”和“enrollcustomersSS”。我使用值dealCap来查询表并获取值,但在这两个表中列名称是不同的,我如何加入它们或者可能是我不需要加入它们,我需要的只是值中的值选择语句。我收到一个错误:

  

“join子句中某个表达式的类型不正确。在连接调用中类型推断失败”

我很感激帮助。

int dealCap = 123;

DataClasses1DataContext db = new DataClasses1DataContext();

var a = from p in db.enrollcustomers
        join o in db.EnrollCustomerSSes on p.DealCapID equals o.AgreementNumber
        where p.DealCapID==dealCap && o.AgreementNumber==dealCap
        select new 
        {
            p.CustName,
            p.DBA,
            o.BillingLanguage
        };

1 个答案:

答案 0 :(得分:0)

检入您的模型和数据库中的类型:

enrollcustomer.DealCapID

EnrollCustomerSS.AgreementNumber

可能一个是string,一个是int。它们必须具有相同的类型。

为外键和主键设置相同的名称是个好习惯(所以它应该是EnrollCustomerSS.DealCapID)。但是这里FK和PK的不同名称并不是你得到这个错误的原因。

正如我在评论中写道的那样:显然不需要部分&& o.AgreementNumber==dealCap,您已经创建了内部联接,它过滤了来自o的行o.AgreementNumber == p.DealCapID

如果无法更改模型,可以使用以下语句:

var a = from p in db.enrollcustomers
        join o in db.EnrollCustomerSSes on new { dealCap = (int)p.DealCapID } equals new { dealCap = int.Parse(o.AgreementNumber) } 
        where p.DealCapID == dealCap 
        select new
        {
            p.CustName,
            p.DBA,
            o.BillingLanguage
        };

或在连接中将两种类型转换为String。

join o in db.EnrollCustomerSSes on new { dealCap = p.DealCapID.ToString() } equals new { dealCap = o.AgreementNumber.ToString() }