C# LINQ EF查询问题

C# LINQ EF查询问题,c#,linq,entity-framework,C#,Linq,Entity Framework,我在代码中遇到实体框架处理linq查询的问题。 虽然SQL Server 2008 R2中的以下查询为我提供了正确的记录集, 我想知道这是否与我的查询或EF有关,如果是EF问题,是否有可能的解决方法。 每个表都有一对多关系。如果我需要提供有关我的问题的更多信息,请告诉我 值得一提的是,源表中有大量FrequencyID和CurrencyID可为Null,在SQL Server中,当我用Null排除源表时,我总共得到360条记录,这是我所期望的结果。不知何故EF在这里干涉,任何帮助都将受到欢迎 S

我在代码中遇到实体框架处理linq查询的问题。 虽然SQL Server 2008 R2中的以下查询为我提供了正确的记录集, 我想知道这是否与我的查询或EF有关,如果是EF问题,是否有可能的解决方法。 每个表都有一对多关系。如果我需要提供有关我的问题的更多信息,请告诉我

值得一提的是,源表中有大量FrequencyID和CurrencyID可为Null,在SQL Server中,当我用Null排除源表时,我总共得到360条记录,这是我所期望的结果。不知何故EF在这里干涉,任何帮助都将受到欢迎

SQL查询

select 
    spa.PartnerNumber,
    sp.FirstName,
    sp.LastName,
    al.AllowanceName,
    spa.StartDate,
    spa.EndDate,
    fr.FrequencyDescription,
    cr.CurrencyCode,
    spa.Note 
from SAP2.PartnerAllowance spa
join MasterData..AllowanceMaster al on al.AllowanceMasterId = spa.AllowanceID
join SAP2.Partner sp on spa.PartnerNumber = sp.PartnerNumber
join MasterData.Currency cr on spa.CurrencyID = cr.CurrencyId
join MasterData..Frequency fr on spa.FrequencyID = fr.FrequencyID
相关LINQ

var sap2Partners = sap2Partner.Get().ToList();
var currency = sap2Currency.Get().ToList();
var frequency = sap2Frequency.Get().ToList();
var sap2PartnerAllowance = sap2PartnerAllowanceRepository.Get().ToList();
var allowance = sap2Allowance.Get().ToList();
var result = (from spa in sap2PartnerAllowance
              join spt in sap2Partners on spa.PartnerNumber equals spt.PartnerNumber
              join al in allowance on spa.AllowanceID equals al.AllowanceMasterId
              join cr in currency on spa.Currency.CurrencyId equals cr.CurrencyId
              join fr in frequency on spa.Frequency.FrequencyID equals fr.FrequencyID
              select new DataEntityUI
              {
                  PartnerNumber = spa.PartnerNumber,
                  FirstName = spt.FirstName,
                  LastName = spt.LastName,
                  AllowanceName = al.AllowanceName,
                  StartDate = String.Format(CurrentUserPreferences.DateFormat, spa.StartDate),
                  EndDate = String.Format(CurrentUserPreferences.DateFormat, spa.EndDate),
                  Amount = spa.Amount,
                  Frequency = fr.FrequencyDescription,
                  Currency = cr.CurrencyDesciption,
                  Note = spa.Note

              }).ToList();

可能导致问题的线路是:

String.Format(CurrentUserPreferences.DateFormat, spa.StartDate)
因为您正在格式化查询本身中的db值。您可以做的是,从查询中获取结果,然后在本地将数据格式化为:

  var result = (from spa in sap2PartnerAllowance
                      join spt in sap2Partners on spa.PartnerNumber equals spt.PartnerNumber
                      join al in allowance on spa.AllowanceID equals al.AllowanceMasterId
                      join cr in currency on spa.Currency.CurrencyId equals cr.CurrencyId
                      join fr in frequency on spa.Frequency.FrequencyID equals fr.FrequencyID
                      select new 
                      {
                          PartnerNumber = spa.PartnerNumber,
                          FirstName = spt.FirstName,
                          LastName = spt.LastName,
                          AllowanceName = al.AllowanceName,
                          StartDate =  spa.StartDate,
                          EndDate = spa.EndDate,
                          Amount = spa.Amount,
                          Frequency = fr.FrequencyDescription,
                          Currency = cr.CurrencyDesciption,
                          Note = spa.Note

                      }).ToList();

        var result2 =result.Select(spa=>new DataEntityUI
                      {
                          PartnerNumber = spa.PartnerNumber,
                          FirstName = spa.FirstName,
                          LastName = spa.LastName,
                          AllowanceName = spa.AllowanceName,
                          StartDate = String.Format(CurrentUserPreferences.DateFormat, spa.StartDate),
                          EndDate = String.Format(CurrentUserPreferences.DateFormat, spa.EndDate),
                          Amount = spa.Amount,
                          Frequency = spa.FrequencyDescription,
                          Currency = spa.CurrencyDesciption,
                          Note = spa.Note
                      }).ToList();

它是Linq到SQL还是EF?问题是什么?这是EF的问题,我在加入货币和频率表时遇到了问题。就像我说的,我可能错了。这是我第一次面对这个问题。运行linq查询时到底会出现什么错误?嘿,正确的数据稍后会出现,您的方法一开始就是灾难性的。您正在获取这么多表的整个表数据,然后进行筛选。除非你需要显示整个数据,否则你永远不应该这样做。我没有得到任何错误,得到一个错误的数据列表。我有一个屏幕,需要显示表上的所有数据,但正如我所说,它只有少数记录……问题在于连接活动,显然货币和频率类有错,我似乎不认为问题出在语法上,但是嘿,谢谢你提出了这个改进。