编写LINQ等效的SQL连接

时间:2014-05-20 03:39:46

标签: c# linq linq-to-entities

这是我写的SQL查询:

select * from Addresses a 
join ProviderAddresses pa on a.address_k =  pa.address_k
where pa.provider_k = 'ABC123'
and pa.active = 1
and a.active = 1
and pa.addresstype_rtk = 'HOME'

这是我为它写的LINQ查询:

public IQueryable<Addresses> GetAddressesesForProvider(string provider_k, string addresstype_rtk)
{
    var query = from a in this.Context.Addresses
        join pa in this.Context.ProviderAddresses on a.Address_K equals pa.Address_K
        where pa.AddressType_RTK == addresstype_rtk
                                   && pa.Active == true
                                   && a.Active == true
        select a;

    return query;
}

但这是错误的。 LINQ一个返回数千个记录,SQL一个只返回一个记录。

它是IQueryable,因为稍后我需要通过for-each循环来完成其结果。 在SQL中,我传递硬编码值进行测试,但在我的代码中,LINQ方法我也传递了相同的硬编码值,因此不是问题。

1 个答案:

答案 0 :(得分:1)

您可能错过了将provider_k条件添加到where;

public IQueryable<Addresses> GetAddressesesForProvider(string provider_k, string addresstype_rtk)
{
    var query = from a in this.Context.Addresses
        join pa in this.Context.ProviderAddresses on a.Address_K equals pa.Address_K
        where pa.Provider_K == provider_k &&
              pa.AddressType_RTK == addresstype_rtk &&
              pa.Active == true &&
              a.Active == true
        select a;

    return query;
}