Converting SQL to LINQ
I have following SQL. I need to convert it to 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'))
[EDITED] and function detail is:
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
Can you please suggest how to convert it to LINQ ? I dont want to use joins.
I do not think you will be able to do this without joins, whether using LINQ or not.
Additionally, it seems like quite the exercise in futility. What benefit do you expect to gain from the time you invest in this?
Furthermore, you haven't specified what LINQ Provider you intend to use, so as is your question is completely unanswerable (each provider has significant differences in syntax).
Ok, make sure you add tblAccountType to your model and it has an association with tblAccount then do somthing like below.
I'm even less able to test this than you but I would suggest that you have a test database with the same schema and populate it with some dummy data.
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.
});
精彩评论