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))