Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到SQL中的关联显示为EntitySet<>;,为什么?_C#_.net_Linq_Linq To Sql_Stored Procedures - Fatal编程技术网

C# Linq到SQL中的关联显示为EntitySet<>;,为什么?

C# Linq到SQL中的关联显示为EntitySet<>;,为什么?,c#,.net,linq,linq-to-sql,stored-procedures,C#,.net,Linq,Linq To Sql,Stored Procedures,我在设计类似于这个遗留存储过程的Linq时遇到了很多麻烦。最大的障碍是它似乎不想让我在与tblAddress的连接中添加第二个“子句”。我收到一个无法解决方法…错误。该tblBusiness.tblAddress被视为一个EntitySet查看当前工作的底部 有人能指出我做错了什么吗?下面是我需要转换的SPROC,第二是我迄今为止的LINQ尝试;它充满了失败 谢谢 SELECT dbo.tblPersonInsuranceCoverage.PersonInsuranceCoverageID,

我在设计类似于这个遗留存储过程的Linq时遇到了很多麻烦。最大的障碍是它似乎不想让我在与
tblAddress
的连接中添加第二个“子句”。我收到一个
无法解决方法…
错误。该
tblBusiness.tblAddress
被视为一个
EntitySet
查看当前工作的底部

有人能指出我做错了什么吗?下面是我需要转换的
SPROC
,第二是我迄今为止的
LINQ
尝试;它充满了失败

谢谢

SELECT dbo.tblPersonInsuranceCoverage.PersonInsuranceCoverageID, 
    dbo.tblPersonInsuranceCoverage.EffectiveDate, 
    dbo.tblPersonInsuranceCoverage.ExpirationDate, 
    dbo.tblPersonInsuranceCoverage.Priority, 
    dbo.tblAdminInsuranceCompanyType.TypeName AS CoverageCategory, 
    dbo.tblBusiness.BusinessName, 
    dbo.tblAdminInsuranceType.TypeName AS TypeName,
    CASE WHEN dbo.tblAddress.AddressLine1 IS NULL THEN '' ELSE dbo.tblAddress.AddressLine1 END 
    + ' ' + 
    CASE WHEN dbo.tblAddress.CityName IS NULL THEN '' ELSE '<BR>' + dbo.tblAddress.CityName END 
    + ' ' + 
    CASE WHEN dbo.tblAddress.StateID IS NULL THEN '' 
         WHEN dbo.tblAddress.StateID = 'ns' THEN '' 
         ELSE dbo.tblAddress.StateID END AS Address
FROM      
    dbo.tblPersonInsuranceCoverage 
        LEFT OUTER JOIN dbo.tblInsuranceCompany 
            ON dbo.tblPersonInsuranceCoverage.InsuranceCompanyID = dbo.tblInsuranceCompany.InsuranceCompanyID 
                LEFT OUTER JOIN dbo.tblBusiness     
                    ON dbo.tblBusiness.BusinessID = dbo.tblInsuranceCompany.BusinessID 
                        LEFT OUTER JOIN dbo.tblAddress 
                            ON dbo.tblAddress.BusinessID = dbo.tblBusiness.BusinessID and tblAddress.AddressTypeID = 'b' 

        LEFT OUTER JOIN dbo.tblAdminInsuranceCompanyType 
            ON dbo.tblPersonInsuranceCoverage.InsuranceCompanyTypeID = dbo.tblAdminInsuranceCompanyType.InsuranceCompanyTypeID  

        LEFT OUTER JOIN dbo.tblAdminInsuranceType 
            ON dbo.tblPersonInsuranceCoverage.InsuranceTypeID = dbo.tblAdminInsuranceType.InsuranceTypeID   

WHERE tblPersonInsuranceCoverage.PersonID = @PersonID
编辑以供进一步尝试 因此,我在dbml中添加了一些关联,以便我可以接受下面Craigs的建议。它几乎起作用了。现在我在
a.AddressTypeID
上得到了一个
无法解析符号的
。奇怪的是,Intellisense告诉我,
tblAddress
是一个
EntitySet
。我是否错过了一个关联,或者我有一个不合适的关联,或者我只是太深了


想法?

我不知道它是否能满足您的所有需要,但您可以使用匿名类型与复合键进行Equijoin:

 from x in table1
 join y in table2 on new { x.Id1, x.Id2 } equals new { y.Id1, y.Id2 }
 ...
看看这是否有帮助。

。相反,请使用L2S为您生成的导航/关联属性:

var coverage = 
                from insuranceCoverage in context.tblPersonInsuranceCoverages
                where insuranceCoverage.PersonID == personID
                select new
                    {
                            insuranceCoverage.PersonInsuranceCoverageID,
                            insuranceCoverage.EffectiveDate,
                            insuranceCoverage.ExpirationDate,
                            insuranceCoverage.Priority,
                            CoverageCategory = insuranceCoverage.insuranceCompany.tblAdminInsuranceCompanyType.TypeName,
                            insuranceCoverage.insuranceCompany.tblBusiness.BusinessName,
                            TypeName = insuranceCoverage.InsuranceTypeID,
                            Address = insuranceCoverage.insuranceCompany.Addresses
                                                                        .Where(a => a.AddressTypeID == 'b')
                                                                        .FirstOrDefault()
                        };

我同意,不幸的是,我没有被赋予智能感知的选项……我想知道为什么……好吧,我进入了
dbml
并添加了一些
关联。我不知道为什么它们不是自动生成的,但我离题了。在那之后,除了
地址
部分,我可以按照你的建议去做。有关详细信息,请参见我的编辑。谢谢当您键入
a.
时,IntelliSense向您显示了什么?你可能需要做一些类似于
a.AddressType.Id
(注意额外的点)的事情。不过,我是个白痴。它应该读为a.AddressTypeID='b'
注意大写的D和第二个=wow!!无论如何,谢谢你的帮助。
var coverage = 
                from insuranceCoverage in context.tblPersonInsuranceCoverages
                where insuranceCoverage.PersonID == personID
                select new
                    {
                            insuranceCoverage.PersonInsuranceCoverageID,
                            insuranceCoverage.EffectiveDate,
                            insuranceCoverage.ExpirationDate,
                            insuranceCoverage.Priority,
                            CoverageCategory = insuranceCoverage.insuranceCompany.tblAdminInsuranceCompanyType.TypeName,
                            insuranceCoverage.insuranceCompany.tblBusiness.BusinessName,
                            TypeName = insuranceCoverage.InsuranceTypeID,
                            Address = insuranceCoverage.insuranceCompany.Addresses
                                                                        .Where(a => a.AddressTypeID == 'b')
                                                                        .FirstOrDefault()
                        };