Asp.net 将SQL转换为LINQ
我有以下SQL。我需要把它转换成LINQAsp.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
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,这就是其中的一部分。我没有表格中的数据,因此我无法验证我是否正确地进行了操作。