private static VarietyCode CreateVarietyCode(VariasjonV22 variasjon, string host)
        {
            if (variasjon == null)
            {
                return(null);
            }

            var varietyCode = new VarietyCode
            {
                Code = new VarietyCodeCode
                {
                    Id         = variasjon.Kode,
                    Definition = $"{host}{variasjon.Kode.Replace(" ", "_")}"
                },
                Name           = variasjon.Navn,
                OverordnetKode = new VarietyCodeCode
                {
                    Id         = variasjon.OverordnetKode,
                    Definition = !string.IsNullOrEmpty(variasjon.OverordnetKode) ? $"{host}{variasjon.OverordnetKode.Replace(" ", "_")}" : ""
                },
                UnderordnetKoder = variasjon.UnderordnetKoder == null ? null : CreateVarietyCode(variasjon.UnderordnetKoder, host).ToArray()
            };

            return(varietyCode);
        }
        public VarietyCode GetByKode(NiNDbContext dbContext, string id, string host, string version = "")
        {
            if (string.IsNullOrEmpty(id))
            {
                return(null);
            }

            var ninVersion = dbContext.NinVersion.FirstOrDefault(x => x.Navn.Equals(version));

            if (ninVersion == null)
            {
                return(null);
            }

            id = id.Replace(" ", "_");

            var variety = dbContext.VariasjonKode
                          .FirstOrDefault(x => x.Version.Id == ninVersion.Id && x.KodeName.Equals(id));

            if (variety == null)
            {
                return(null);
            }

            VarietyCode varietyCode = null;

            switch (variety.VarietyCategory)
            {
            case VarietyEnum.VarietyLevel0:
                var v0 = dbContext.VarietyLevel0s
                         .Include(x => x.Kode)
                         .Include(x => x.UnderordnetKoder)
                         .FirstOrDefault(x => x.Kode.Id == variety.Id);

                if (v0 == null)
                {
                    return(null);
                }

                varietyCode = new VarietyCode
                {
                    Name             = v0.Navn,
                    Code             = ConvertVarietyCode(v0.Kode, host),
                    UnderordnetKoder = CreateUnderordnetKoder(dbContext, v0.UnderordnetKoder, host)
                };
                break;

            case VarietyEnum.VarietyLevel1:
                var v1 = dbContext.VarietyLevel1s
                         .Include(x => x.Kode)
                         .Include(x => x.OverordnetKode.Kode)
                         .Include(x => x.UnderordnetKoder)
                         .FirstOrDefault(x => x.Kode.Id == variety.Id);

                if (v1 == null)
                {
                    return(null);
                }

                varietyCode = new VarietyCode
                {
                    Name           = v1.Navn,
                    Code           = ConvertVarietyCode(v1.Kode, host),
                    OverordnetKode = new VarietyCodeCode
                    {
                        Id         = v1.OverordnetKode.Kode.KodeName,
                        Definition = $"{host}{v1.OverordnetKode.Kode.KodeName}"
                    },
                    UnderordnetKoder = CreateUnderordnetKoder(dbContext, v1.UnderordnetKoder, host)
                };
                break;

            case VarietyEnum.VarietyLevel2:
                var v2 = dbContext.VarietyLevel2s
                         .Include(x => x.Kode)
                         .Include(x => x.OverordnetKode.Kode)
                         .Include(x => x.UnderordnetKoder)
                         .FirstOrDefault(x => x.Kode.Id == variety.Id);

                if (v2 == null)
                {
                    return(null);
                }

                varietyCode = new VarietyCode
                {
                    Name           = v2.Navn,
                    Code           = ConvertVarietyCode(v2.Kode, host),
                    OverordnetKode = new VarietyCodeCode
                    {
                        Id         = v2.OverordnetKode.Kode.KodeName,
                        Definition = $"{host}{v2.OverordnetKode.Kode.KodeName}"
                    },
                    UnderordnetKoder = CreateUnderordnetKoder(dbContext, v2.UnderordnetKoder, host)
                };
                break;

            case VarietyEnum.VarietyLevel3:
                var v3 = dbContext.VarietyLevel3s
                         .Include(x => x.Kode)
                         .Include(x => x.OverordnetKode.Kode)
                         .Include(x => x.UnderordnetKoder)
                         .FirstOrDefault(x => x.Kode.Id == variety.Id);

                if (v3 == null)
                {
                    return(null);
                }

                varietyCode = new VarietyCode
                {
                    Name           = v3.Navn,
                    Code           = ConvertVarietyCode(v3.Kode, host),
                    OverordnetKode = new VarietyCodeCode
                    {
                        Id         = v3.OverordnetKode.Kode.KodeName,
                        Definition = $"{host}{v3.OverordnetKode.Kode.KodeName}"
                    },
                    UnderordnetKoder = CreateUnderordnetKoder(dbContext, v3.UnderordnetKoder, host)
                };
                break;

            case VarietyEnum.VarietyLevel4:
                var v4 = dbContext.VarietyLevel4s
                         .Include(x => x.Kode)
                         .Include(x => x.OverordnetKode.Kode)
                         .Include(x => x.UnderordnetKoder)
                         .FirstOrDefault(x => x.Kode.Id == variety.Id);

                if (v4 == null)
                {
                    return(null);
                }

                varietyCode = new VarietyCode
                {
                    Name           = v4.Navn,
                    Code           = ConvertVarietyCode(v4.Kode, host),
                    OverordnetKode = new VarietyCodeCode
                    {
                        Id         = v4.OverordnetKode.Kode.KodeName,
                        Definition = $"{host}{v4.OverordnetKode.Kode.KodeName}"
                    },
                    UnderordnetKoder = CreateUnderordnetKoder(dbContext, v4.UnderordnetKoder, host)
                };
                break;

            case VarietyEnum.VarietyLevel5:
                var v5 = dbContext.VarietyLevel5s
                         .Include(x => x.Kode)
                         .Include(x => x.OverordnetKode.Kode)
                         .FirstOrDefault(x => x.Kode.Id == variety.Id);

                if (v5 == null)
                {
                    return(null);
                }

                varietyCode = new VarietyCode
                {
                    Name           = v5.Navn,
                    Code           = ConvertVarietyCode(v5.Kode, host),
                    OverordnetKode = new VarietyCodeCode
                    {
                        Id         = v5.OverordnetKode.Kode.KodeName,
                        Definition = $"{host}{v5.OverordnetKode.Kode.KodeName}"
                    }
                };
                break;
            }

            return(varietyCode);
        }