首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

linq一对多的查询,请相助

2013-06-26 
linq一对多的查询,请帮助class HY{public int HYID { get set }public string HYName { get set }publ

linq一对多的查询,请帮助
    class HY
    {
        public int HYID { get; set; }
        public string HYName { get; set; }
        public virtual List<HYDD> HYDD { get; set; }
    }
    class HYDD
    {
        public int HYDDID { get; set; }
        public int HYID{ get; set; }
        public int DDName{ get; set; }
    }

1.查询HY时,显示出相关的DDName,多个DDName以逗号分隔; 
2.查询包含指定 DDName的HY记录;

我想以list.where(...)形式查询,应该怎么写? linq
[解决办法]


 class HY
        {
            public int HYID { get; set; }
            public string HYName { get; set; }
            public virtual List<HYDD> HYDD { get; set; }
        }
        class HYDD
        {
            public int HYDDID { get; set; }
            public int HYID { get; set; }
            public string DDName { get; set; }
        }
        static void Main(string[] args)
        {
            List<HYDD> listhydd1 = new List<HYDD>() 
            { 
                new HYDD() { HYDDID = 1, HYID = 1, DDName = "HYDD1" }, 
                new HYDD() { HYDDID = 2, HYID = 1, DDName = "HYDD2" },
                new HYDD() { HYDDID = 3, HYID = 2, DDName = "HYDD3" }, 
                new HYDD() { HYDDID = 4, HYID = 2, DDName = "HYDD4" }


            };
            List<HYDD> listhydd2 = new List<HYDD>() 
            { 
                new HYDD() { HYDDID = 5, HYID = 1, DDName = "HYDD5" }, 
                new HYDD() { HYDDID = 6, HYID = 1, DDName = "HYDD6" },
                new HYDD() { HYDDID = 7, HYID = 2, DDName = "HYDD7" }, 
                new HYDD() { HYDDID = 8, HYID = 2, DDName = "HYDD8" }
            };
            List<HY> listhy = new List<HY>() { new HY() { HYID = 1, HYName = "HY1", HYDD = listhydd1 }, new HY() { HYID = 2, HYName = "HY2", HYDD = listhydd2 } };
            Console.WriteLine("---------------Begin HY-----------------");
            foreach (var hy in listhy)
            {
                Console.WriteLine(hy.HYID + "\t" + hy.HYName + "\t" + String.Join(",", hy.HYDD.Select(x => x.DDName)));
            }
            Console.WriteLine("---------------End   HY-----------------");

            var mquery = from hy in listhy
                         where hy.HYDD.Select(x => x.DDName).Contains("HYDD5")
                         select hy;
            foreach (var mq in mquery)
            {
                Console.WriteLine(mq.HYID + "\t" + mq.HYName + "\t" + String.Join(",", mq.HYDD.Select(x => x.DDName)));
            }
}


[解决办法]
简单的代码示例

    List<HYDD> lsz = new List<HYDD> { };
            lsz.Add(new HYDD { HYDDID = 1, HYID = 1, DDName = "广州" });


            lsz.Add(new HYDD { HYDDID = 2, HYID = 1, DDName = "深圳" });
            lsz.Add(new HYDD { HYDDID = 1, HYID = 1, DDName = "东莞" });
            List<HY> list = new List<HY> { };
            list.Add(new HY { HYID = 1, HYName = "广东", HYDD = lsz });
            //查询广东省下的市区
            var query = list.Where(x => x.HYName == "广东").Select(x => new { DDName = string.Join(",", x.HYDD.Select(p => p.DDName)) }).FirstOrDefault();
            //查询某个市属于省 
            var query2 = from p in lsz
                         from m in list
                         where p.HYID == m.HYID
                         where p.DDName == "东莞"
                         select
                         new
                             {
                                 Name = m.HYName
                             };

            Console.WriteLine(query.DDName);

            Console.WriteLine(query2.FirstOrDefault().Name);


[解决办法]
class HY
    {
        public int HYID { get; set; }
        public string HYName { get; set; }
        public virtual List<HYDD> HYDD { get; set; }

        public string HYDDNames
        {
            get{ return this.HYDD == null 
                        ? null 


                        : string.Join(",", this.HYDD.Select(h=>h.DDName).ToArray());
        }
    }

 var query = db.hys.FirstOrDefault(hy => hy.HYDD.Any(hd=>hd.DDName == name))

热点排行