Sql 查询到 EF linq 查询表达式[已关闭]

问题描述 投票:0回答:1
INSERT INTO Report
  ( TestDetailID, ReceiptID, TestID, DrName, ReceiptDate, ReceiptTime, PatientName,
    Age, Sex, AgeDesc, Telephone, Address, DrID, ReportDate, ReportTime, CurrentUser,
    [Test Description], ReportType, TestPartID, PARTICULARS, [Part_Head], [Part_Head No],
    PartType, Results, UNITS, SUPERSCRIPT, MALE, FEMALE, [Rem-Com-Method], ReportHead, Specimen )
SELECT
  [TestDetails_2].TestDetailID, [TestDetails_2].ReceiptID, [TestDetails_2].TestID, Doctors.DrName, [SampleReceipts_2].ReceiptDate, [SampleReceipts_2].ReceiptTime, [SampleReceipts_2].PatientName,
  [SampleReceipts_2].Age, [SampleReceipts_2].Sex, [SampleReceipts_2].AgeDesc, [SampleReceipts_2].Telephone, [SampleReceipts_2].Address, [SampleReceipts_2].DrID, [SampleReceipts_2].ReportDate, [SampleReceipts_2].ReportTime, [SampleReceipts_2].CurrentUser,
  Tests.[Test Description], Tests.ReportType, TestParticulars.TestPartID, TestParticulars.PARTICULARS, TestParticulars.[Part_Head], TestParticulars.[Part_Head No],
  TestParticulars.PartType, TestParticulars.Results, TestParticulars.UNITS, TestParticulars.SUPERSCRIPT, TestParticulars.MALE, TestParticulars.FEMALE, [Rem-Comm-Method].[Rem-Com-Method], Tests.ReportHead, [SampleReceipts_2].Specimen
FROM
  (
    (Tests
     INNER JOIN TestParticulars ON Tests.TestNo = TestParticulars.TestNo)
    INNER JOIN [Rem-Comm-Method] ON Tests.TestNo = [Rem-Comm-Method].TestNo)
  INNER JOIN (
    (Doctors
     INNER JOIN [SampleReceipts_2] ON Doctors.DrID = [SampleReceipts_2].DrID)
    INNER JOIN [TestDetails_2] ON [SampleReceipts_2].ReceiptID = [TestDetails_2].ReceiptID
  ) ON Tests.TestID = [TestDetails_2].TestID
WHERE
  ((
    ([TestDetails_2].ReceiptID)=[Forms]![SampleReceipts]![ReceiptID]
  ))
ORDER BY
  TestParticulars.TestPartID;

如何将此sql查询转换为C#实体框架的linq? 我在 Linqer 中尝试过,但出现了连接子查询错误。我尝试像下面这样手动转换,但在 C# 中遇到错误。

queryReports = 
    from ((Tests INNER JOIN TestParticulars ON Tests.TestNo = TestParticulars.TestNo) INNER JOIN [Rem-Comm-Method] ON Tests.TestNo = [Rem-Comm-Method].TestNo) INNER JOIN ((Doctors INNER JOIN [SampleReceipts_2] ON Doctors.DrID = [SampleReceipts_2].DrID) INNER JOIN [TestDetails_2] ON [SampleReceipts_2].ReceiptID = [TestDetails_2].ReceiptID) ON Tests.TestID = [TestDetails_2].TestID
    where
      [TestDetails_2].ReceiptID=[SampleReceipts]![ReceiptID]
    orderby
      TestParticulars.TestPartID
    select new {
[TestDetails_2].TestDetailID, [TestDetails_2].ReceiptID, [TestDetails_2].TestID, Doctors.DrName, [SampleReceipts_2].ReceiptDate, [SampleReceipts_2].ReceiptTime, [SampleReceipts_2].PatientName, [SampleReceipts_2].Age, [SampleReceipts_2].Sex, [SampleReceipts_2].AgeDesc, [SampleReceipts_2].Telephone, [SampleReceipts_2].Address, [SampleReceipts_2].DrID, [SampleReceipts_2].ReportDate, [SampleReceipts_2].ReportTime, [SampleReceipts_2].CurrentUser, Tests.[Test Description], Tests.ReportType, TestParticulars.TestPartID, TestParticulars.PARTICULARS, TestParticulars.[Part_Head], TestParticulars.[Part_Head No], TestParticulars.PartType, TestParticulars.Results, TestParticulars.UNITS, TestParticulars.SUPERSCRIPT, TestParticulars.MALE, TestParticulars.FEMALE, [Rem-Comm-Method].[Rem-Com-Method], Tests.ReportHead, [SampleReceipts_2].Specimen
    };
c# sql entity-framework linq
1个回答
0
投票

您的 SQL 具有在数据库中执行 sql 时所需的重复联接,但在 C# 中会导致错误。我删除了重复项。请参阅下面的代码

queryReports = from t in Tests
   join tp in TestParticulars on t.TestNo equals tp.TestNo
   join rcm in [Rem-Comm-Method] on t.TestNo equals rcm.TestNo
   join t2 in TestDetails_2 on t.TestID equals t2.TestID
   join s in [SampleReceipts_2] on t2.ReceiptID equals s.ReceiptID
   join d in Doctors on s.DrID equals d.DrID
   select new { t2.TestDetailID, t2.ReceiptID, t2.TestID, d.DrName, s.ReceiptDate, s.ReceiptTime, s.PatientName,
                s.Age, s.Sex, s.AgeDesc, s.Telephone, s.Address, s.DrID, s.ReportDate, s.ReportTime, s.CurrentUser, t.[Test Description], t.ReportType, tp.TestPartID, tp.PARTICULARS, tp.[Part_Head],
                tp.[Part_Head No], tp.PartType, tp.Results, tp.UNITS, tp.SUPERSCRIPT, tp.MALE, tp.FEMALE, rcm.[Rem-Com-Method], t.ReportHead, s2.Specimen};
© www.soinside.com 2019 - 2024. All rights reserved.