0

我想从一些表中选择一些字段请帮助将 sql 查询转换为 linq,我需要将这些值显示到 mvc3 webgrid 中。

如何将内部联接转换为 linq?或者有什么办法可以在EF中做到这一点?

SELECT
DISTINCT
    SecurityIdentifier_All.SecurityId,
    NAV.CompanyName,
    NAV.SecurityType,
    SecurityIdentifier_All.Identifier,
    SecurityIdentifier_All.SecurityIdentifierTypeId
FROM
    Fireball_Reporting..Reporting_DailyNAV_Pricing NAV
INNER JOIN
    Fireball_Reporting..SecurityIdentifier_All ON  
         SecurityIdentifier_All.SecurityId = NAV.PricingSecurityID
inner join  
    (
    SELECT  SecurityId, MAX(SecurityIdentifierTypeId) SecurityIdentifierTypeId
FROM    Fireball_Reporting..SecurityIdentifier_All
where  SecurityIdentifierTypeId in (1,16)
group by SecurityId
    ) IdentifierType on
    IdentifierType.SecurityId = SecurityIdentifier_All.SecurityId and
    IdentifierType .SecurityIdentifierTypeId = 

SecurityIdentifier_All.SecurityIdentifierTypeId
WHERE
    Date = Fireball_Configuration.dbo.PreviousBusinessDay()

在上面SecurityIdentifier_AllNAV是一个视图。Fireball_Reporting 数据库名称。在答案中直到第一个内部连接完成。请帮我完成最后一部分。

4

1 回答 1

0

我的原始答案满足了您问题的先前版本,其中包括一个只有两个连接的 SQL 查询。

既然您有三个 INNER JOINS,我不会尝试在一个 LINQ 查询中完成所有这些操作。你当然可以,但它的可读性不是很好(很像你的 SQL 版本)。

我会在单独的步骤中执行子查询。像这样的东西:

var identifierType = context.SecurityIdentifier_Alls
    .Where(si => si.SecurityIdentifierTypeId == 1 || si.SecurityIdentifierTypeId == 6)
    .GroupBy(si => si.SecurityId)
    .Select(g => new { SecurityId = g.Key, SecurityIdentifierTypeField = g.Max(si => si.SecurityIdentifierTypeId) });

var query = 
    (from nav in context.Reporting_DailyNAV_Pricings
     from si in context.SecurityIdentifier_Alls
     from idt in identifierTypes 
     where si.SecurityId = nav.PricingSecurityID
        && idt.SecurityId == si.SecurityId
     select new { si.SecurityId, nav.CompanyName, nav.SecurityType, si.Identifier, si.SecurityIdentifierTypeId })
     .Distinct();

我没有在 UDF 工作以获得前一个工作日。此外,这些都没有经过测试(当然),但这可能与您正在寻找的内容接近。

我不确定你有什么可用的。如果您使用设置了导航属性的 LINQ-to-Entities,则无需在上述代码的 where 子句中链接表。

于 2012-04-20T15:57:38.720 回答