Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Asp.net 将SQL转换为LINQ_Asp.net_Linq_Linq To Entities - Fatal编程技术网

Asp.net 将SQL转换为LINQ

Asp.net 将SQL转换为LINQ,asp.net,linq,linq-to-entities,Asp.net,Linq,Linq To Entities,我有以下SQL。我需要把它转换成LINQ ALTER VIEW [dbo].[vwRptBorrowerAccount] AS SELECT dbo.tblAccount.[Creditor Registry ID], dbo.tblAccount.[Account No], dbo.tblAccount.[Date Opened], dbo.tblAccount.[Account Status ID], dbo.tblAccount.[Date Fi

我有以下SQL。我需要把它转换成LINQ

ALTER VIEW [dbo].[vwRptBorrowerAccount]  
AS  
SELECT dbo.tblAccount.[Creditor Registry ID], dbo.tblAccount.[Account No], dbo.tblAccount.[Date Opened], dbo.tblAccount.[Account Status ID],   
               dbo.tblAccount.[Date First Reported], dbo.tblAccount.[Credit Limit], dbo.tblAccount.Balance, dbo.tblAccount.[Minimum Installment], dbo.tblAccount.[Account Type],   
               dbo.tblAccount.Term, dbo.tblAccount.Purpose, dbo.tblAccount.[Account Owner Notes], dbo.tblAccount.[Creditor Notes], dbo.tblAccount.Collateral,   
               dbo.tblAccount.[Collateral Value], dbo.tblAccount.[Legal Status ID], dbo.tblAccount.[Legal Status Date], dbo.tblAccount.LastUpdatedBy,   
               dbo.tblAccount.LastUpdated, dbo.tblAccount.[Unique ID], dbo.tblAccount.[Account Status Date], dbo.tblAccount.Payment, dbo.tblAccount.[Payment Date],   
               dbo.tblAccount.[Balance Date], dbo.tblAccount.[Term Frequency], dbo.tblAccount.[State Change Date],   
               dbo.fn_GetAccountTypeDescription(dbo.tblAccount.[Account Type]) AS [Account Type Description], dbo.tblBusiness.[Business Name] AS CreditorName,   
               dbo.tblBusiness.Address AS CreditorAddress, dbo.tblBusiness.City AS CreditorCity, dbo.tblBusiness.State AS CreditorState,   
               dbo.tblLegalStatus.[Legal Status Description] AS [Legal Status], dbo.tblAccountStatus.[Account Status Description] AS [Account Status],   
               dbo.tblAccountOwner.[Account Owner Registry ID]  
FROM  dbo.tblAccount INNER JOIN  
               dbo.tblAccountOwner ON dbo.tblAccount.[Creditor Registry ID] = dbo.tblAccountOwner.[Creditor Registry ID] AND   
               dbo.tblAccount.[Account No] = dbo.tblAccountOwner.[Account No] INNER JOIN  
               dbo.tblBusiness ON dbo.tblAccount.[Creditor Registry ID] = dbo.tblBusiness.[Registry ID] INNER JOIN  
               dbo.tblAccountStatus ON dbo.tblAccount.[Account Status ID] = dbo.tblAccountStatus.[Account Status ID] INNER JOIN  
               dbo.tblLegalStatus ON dbo.tblAccount.[Legal Status ID] = dbo.tblLegalStatus.[Legal Status ID]  
WHERE (dbo.tblAccount.[Account Type] NOT IN ('CA00', 'CA01', 'CA03', 'CA04', 'CA02', 'PA00', 'PA01', 'PA02', 'PA03', 'PA04')) 
[已编辑] 功能详情如下:

CREATE FUNCTION [fn_GetAccountTypeDescription]  
(  
 -- Add the parameters for the function here  
 @accountType varchar(max)  
)  
RETURNS varchar(max)  
with schemabinding  
AS  
BEGIN  
 -- Declare the return variable here  
 DECLARE @Result varchar(max)  

 -- Add the T-SQL statements to compute the return value here  
 IF EXISTS(SELECT Abbreviation FROM dbo.tblAccountType WHERE [Account Type Code] = @accountType)  
 BEGIN  
  SELECT @Result = Abbreviation FROM dbo.tblAccountType WHERE [Account Type Code] = @accountType  
 END  
 ELSE  
 BEGIN  
  SELECT @Result = @accountType  
 END  

 -- Return the result of the function  
 RETURN @Result  

END

您能建议如何将其转换为LINQ吗?我不想使用联接。

我认为没有联接,无论是否使用LINQ,您都无法做到这一点

此外,这似乎是徒劳的练习。您希望从投资中获得什么好处


此外,您还没有指定要使用的LINQ提供程序,因此您的问题完全无法回答。每个提供程序在语法上都有显著差异。

好的,请确保将tblAccountType添加到模型中,并且它与tblAccount有关联,然后执行如下操作

我的测试能力甚至不如您,但我建议您拥有一个具有相同模式的测试数据库,并用一些虚拟数据填充它

String[] excludedCodes = new String[]
    {
        "CA00",
        "CA01",
        "CA03",
        "CA04",
        "CA02",
        "PA00",
        "PA01",
        "PA02",
        "PA03",
        "PA04"
    };

var data = context.tblAccount.Where(a => !excludedCodes.Contains(a.AccountType))
    .Select(a => new{
            a.Creditor_Registry_ID,
            a.Account_No,
            a.Date_Opened,
            ...
            Account_Type_Description = a.tblAccountType.Where
                (t => t.Account_Type_Code = a.Account_Type).SingleOrDefault() 
                   ??  a.Account_Type),
            Creditor_Name = a.tblBusiness.Business_Name,
            CreditorAddress = a.tblBusiness.Address,
            ...
            Legal_Status = a.tblLegalStatus.Legal_Status_Description,
            ... etc.
        });

我想使用关联。实体是通过相关属性链接的。最尴尬的是fn_GetAccountTypeDescription@Jodrell:我更新了问题以显示fn_GetAccountTypeDescription您可以使用设计用于完成这类工作的应用程序,如linqpad或linqer。。。为什么要将其转换为LINQ?您试图从此查询创建哪些对象?如果您只是试图检索查询结果,那么使用ORM是没有意义的——实际上这样做是个坏主意。林克:顺便问一下,你想干什么?LINQ到SQL?实体?尼伯酸盐?每个ORM都有自己的方法来指定应同时加载某些实体,而不是单独加载每个实体。我在asp.net中设计了一个应用程序,我正在使用LINQ和entities Framework 4.1将其转换为MVC3,这就是其中的一部分。我没有表格中的数据,因此我无法验证我是否正确地进行了操作。