LINQ中奇异数据模型的左外连接

时间:2010-11-07 18:57:24

标签: c# linq left-join

我有一个看起来像这样的课程:

public class KpiValue
{
    public string ID { get; set; }

    public string NAME { get; set; }

    public string ORG_UNIT_ID { get; set; }

    public string SITE_ID { get; set; }

    public string AREA_ID { get; set; }

    public double? VALUE { get; set; }

}

相应的SiteAreaOrganizationOrgUnit类,每个都有ID属性。只有一个属性具有值,其余属性为null(不是我的想法)。

我想将这个结构规范化为有用的东西,分配一个看起来像的NAME属性:

“区域:我的第一区”或 “网站:有史以来最好的网站”

包含与我的班级的相应ID属性(AREA_ID或SITE_ID或......)匹配的网站或区域或组织的名称等。

假设到目前为止我已经得到了这个......

var org = Organization.FindByProperty("NAME",orgName);

var orgUnits = org.GetOrgUnits().AsEnumerable();

var sites = from OrgUnit ou in orgUnits
            from Site s in ou.GetSites()
            select s;

var areas = from Site s in sites
            from area in s.Areas()
            select area;

//help!
var monthlyGrid = from KpiValue monthlyKpi in kpiMonthlyValues
                  join area in areas on monthlyKpi.AREA_ID equals area.ID
                  join site in sites on monthlyKpi.SITE_ID equals site.ID
                  join orgUnit in orgUnits on monthlyKpi.ORG_UNIT_ID equals orgUnit.ID
                  select new monthlyKpi()
                  {
                   NAME = //"Area: MyArea" or "Site: MySite"
                   ...
                   };

连接似乎与AND条件匹配,而不是OR条件......如何在LINQ中实现此目的?

1 个答案:

答案 0 :(得分:0)

查看Linq 101网站上的左外连接示例。

您需要使用Enumrable.DefaultIfEmpty