代码之家  ›  专栏  ›  技术社区  ›  MKF

LINQ查询选择的新类,如何转移到另一个模型?

  •  0
  • MKF  · 技术社区  · 6 年前

    我真的不理解这一点,因为我只涉足过MVC和C。如果我的术语错误或混淆,我道歉,我会尽力回答问题。我有几个这样的模型:

     public class DataSharingModels
    {
        public string ReferenceID { get; set; }
        public NBTC NBTCGroup { get; set; }
        public Contractors ContractorsGroup { get; set; }
        public Coordinators CoordinatorsGroup { get; set; }
        public NGO NGOGroup { get; set; }
        public Public PublicGroup { get; set; }
        public SelectList FA_RA_List { get; set; }
    
    }
    
    public class NBTC
    {
        public String NBTC_FA_Centroid { get; set; }
        public String NBTC_FA_Bound { get; set; }
        public String NBTC_RA_Centroid { get; set; }
        //more properties...
     }
    

    这个 DataSharingModels 类包含 public NBTC NBTCGroup 财产。它不是 public List<NBTC> NBTCGroup 因为被命中的控制器的每个实例将只生成一个。

    现在,在我的控制器中,我有一个LINQ语句来选择一个新的NBTC类:

    var nbtcVals = (from ds in db.SharingPermissions
                            where ds.FocalRefID.ToString() == ReferenceID
                            && ds.ShareGroup == "NBTC"
                            select new NBTC
                            {
                                NBTC_FA_Centroid = ds.CIP_FA_Centroid,
                                NBTC_FA_Bound = ds.CIP_FA_Boundary,
                                NBTC_RA_Centroid = ds.CIP_RA_Centroid,
                                //more properties...
                            });
    

    我出错的地方是我想在我的 数据共享模型 模型。我想 nbtcVals 类型为nbtc,但它是iqueryable<.models.nbtc>。我知道我可以这样做,但这似乎是多余的:

            DataSharingModels dsm = new DataSharingModels();
    
            if (nbtcVals.Any())
            {
                foreach (var i in nbtcVals)
                {
                    dsm.NBTCGroup.NBTC_FA_Centroid = i.NBTC_FA_Centroid;
                    dsm.NBTCGroup.NBTC_FA_Boundary = i.NBTC_FA_Bound;
                    dsm.NBTCGroup.NBTC_RA_Centroid = i.NBTC_RA_Centroid;
                    //more properties...
                }
            }
    

    更直接的方法是什么?一定有一个。我想我还可以在Linq查询中返回匿名类型,然后在 foreach 喜欢 dsm.NBTCGroup.NBTC_RA_Centroid = i.NBTC_RA_Centroid 但这似乎与另一种方式相同。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Cetin Basoz    6 年前
    var nbtcgroup = (from ds in db.SharingPermissions
                            where ds.FocalRefID.ToString() == ReferenceID
                            && ds.ShareGroup == "NBTC"
                            select new NBTC
                            {
                                NBTC_FA_Centroid = ds.CIP_FA_Centroid,
                                NBTC_FA_Bound = ds.CIP_FA_Boundary,
                                NBTC_RA_Centroid = ds.CIP_RA_Centroid,
                                //more properties...
                            })
                  .OrderByDescending(n => n.Id) // or some other property that could identify sorting
                  .FirstOrDefault();
    

    这一个具有到SQL的转换(限制或顶部取决于后端)。