Web API Get方法在JSON中返回Empty

时间:2017-03-17 13:03:51

标签: c# json entity-framework-6

我尝试使用实体框架构建一个简单的Web Api。我从数据库的表中获取所有行,并将所有数据显示为JSON对象。但是我有一个关于获取某些列的值的问题,这些列与另一个表有关系。此问题导致获取空JSON对象。下面是我的get方法代码

public class ProjeOzet_Repository
    {
        private MGEOPROJETAKIPT_TEntities db = new MGEOPROJETAKIPT_TEntities();

        public IQueryable<ProjeOzet> GetProjeOzets()
        {

            var projeOzet = from p in db.PROJE_OZET
                            join pt in db.PO_PROJE_TURU on p.PROJE_TURU equals pt.ID
                            join dir in db.PO_DIREKTORLUK on p.P_YURUTEN_D equals dir.ID
                            join gb in db.PO_GRUP_B on p.P_YURUTEN_GB equals gb.ID
                            join mud in db.PO_MUDURLUK on p.P_YURUTEN_M equals mud.ID

                            join yon in db.Z_Personel_MGEO_BAK on (int)p.P_YONETICISI_SNO equals yon.SNO
                            join kat in db.PO_KATEGORI on p.P_KATEGORI equals kat.ID
                            join f in db.PO_FAZ on p.P_FAZ equals f.ID
                            select new ProjeOzet()
                            {
                                Id = p.PROJE_ID,

                                gizli = p.GIZLI,
                                raporlanacak = p.RAPORLANACAK,

                                projeNo = p.PROJE_NO_MGEO,
                                projeTanim = p.P_TANIM_MGEO,
                                projeGBId = p.P_YURUTEN_GB,
                                projeDirektorlukId = p.P_YURUTEN_D,
                                projeMudurlukId = p.P_YURUTEN_M,
                                projeTuru = pt.UZUN_AD,
                                projeTuruId = p.PROJE_TURU,

                                projeDirektorluk = dir.AD,
                                projeGB = gb.AD,
                                projeMudurluk = mud.AD,

                                yonetici = yon.AD + " " + yon.SOYAD,
                                sektorIci = p.SI_SA,

                                anaYukleniciSektor = p.ANA_YUKLENICI_S,
                                altYukleniciSektor = p.ALT_YUKLENICI_S, //Bu kısım arayüzde eşleştirilecek
                                projeKisaTanim = p.PROJE_KISA_TANIMI,
                                sozlesmeBaslangicTarihi = p.SOZLESME_BASLANGIC_TARIHI,
                                sozlesmeBitisGH = p.SOZLESME_BITIS_TARIHI_GH,
                                sozlesmeBitisGD = p.SOZLESME_BITIS_TARIHI_GD,
                                sozlesmeImzaTarihi = p.SOZLESME_IMZA_TARIHI,
                                aliciKurum = p.ALICI_KURUM,
                                ihtiyacSahibiKurum = p.IHTIYAC_SAHIBI_KURUM,
                                anaYukleniciKurum = p.ANA_YUKLENICI_KURUM,
                                kategori = kat.Aciklama,
                                faz = f.Aciklama,
                                ur_sp = p.UR_SP,
                                ekleyen = p.Ekleyen

                            };

            return projeOzet;
        }


    }

我的对象控制器是;

public class ProjeOzetController : ApiController
    {
       private ProjeOzet_Repository projeOzetRepository;

        public ProjeOzetController()
        {
            this.projeOzetRepository = new ProjeOzet_Repository();
        }
        public IQueryable<ProjeOzet> Get()
        {
            return projeOzetRepository.GetProjeOzets();

        }
    }

我的对象模型是;

public class ProjeOzet
    {
        public int Id { get; set; }

        public bool gizli { get; set; }
        public bool raporlanacak { get; set; }

        public string projeNo { get; set; }
        public string projeTanim { get; set; }
        public string projeTuru { get; set; }

        public int? projeTuruId { get; set; }
        public int? projeGBId { get; set; }
        public int? projeDirektorlukId { get; set; }
        public int? projeMudurlukId { get; set; }

        public string projeGB { get; set; }
        public string projeDirektorluk { get; set; }
        public string projeMudurluk { get; set; }

        public string yonetici { get; set; }
        public int? sektorIci { get; set; }
        public int? anaYukleniciSektor { get; set; }
        public string altYukleniciSektor { get; set; }
        public string projeKisaTanim { get; set; }
        public DateTime? sozlesmeImzaTarihi { get; set; }
        public DateTime? sozlesmeBaslangicTarihi { get; set; }
        public DateTime? sozlesmeBitisGH { get; set; }
        public DateTime? sozlesmeBitisGD { get; set; }
        public string aliciKurum { get; set; }
        public string ihtiyacSahibiKurum { get; set; }
        public string anaYukleniciKurum { get; set; }
        public string kategori { get; set; }
        public string faz { get; set; }
        public int? ur_sp { get; set; }
        public int? ekleyen { get; set; }

    }

例如,kategori变量存在一些问题。我有另一个绑定到此变量的表,并且有两列; ID(int)和说明(nvarchar)。我将kategori的ID值保存到我的主表(它在PROJE_OZET的P_KATEGORI列下,并且可以为空)。我想显示ID为限制的Explanation。对于我的主表(PROJE_OZET)中的一行,如果P_KATEGORI有一个值,则没有问题。但是,如果此列的行为null,则在调用GET方法时会得到一个空的JSON对象,尽管其他列具有值。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

最有可能的是,您需要进行左连接而不是内连接。以下是如何执行此操作的示例:

   var query = from person in people
                    join pet in pets on person equals pet.Owner into gj
                    from subpet in gj.DefaultIfEmpty();