所以我有一张办公地点表,每列都包含相关信息(即办公室名称,地址,城市,州,邮编,国家)。
我在界面中设置了用户选择他们的办公室,剩下的就是为他们填写。
我知道如何使用通用列表并使用一行包含多行填充它,因为我使用下拉菜单填充了该列,该列表列出了同一个表中的办公室位置。
我不知道如何使用单行中的多列填充通用列表。
例如,以下是我对前者的代码,它可以正常工作:
private List<string> selectLocs()
{
Locs offLoc = new Locs();
List<string> objList = new List<string>();
var select = from l in offLoc.Locations
orderby l.OFFICE
select l;
foreach (Location loc in select)
{
objList.Add(loc.OFFICE);
}
return objList;
}
以下是后一种情况的代码,不完整,因为我不知道如何做同样的事情:
private List<string> selectAddr(string strLoc)
{
List<string> objList = new List<string>();
Locs offLocs = new Locs();
var select = from l in offLocs.Locations
where l.OFFICE == strLoc
select l;
//foreach what? in select? Do I even use a foreach loop?
return objList;
}
不知道为什么之前没有人问过这个问题。
答案 0 :(得分:4)
您可以简化第一种方法:
private List<string> SelectLocations()
{
Locs offLoc = new Locs();
return (from l in offLoc.Locations
orderby l.OFFICE
select l.OFFICE).ToList();
}
你的第二种方法:
private List<string> SelectAddresses(string strLoc)
{
Locs offLocs = new Locs();
return (from l in offLocs.Locations
where l.OFFICE == strLoc
select l.ADDRESS).ToList();
}
更新:如果您需要多个属性,则返回完整位置对象:
private List<Location> SelectLocations(string strLoc)
{
Locs offLocs = new Locs();
return (from l in offLocs.Locations
where l.OFFICE == strLoc
select l).ToList();
}
还要尽量避免使用匈牙利表示法(在变量名称中添加前缀,这些变量名称描述变量类型)。您可以使用strLoc
而不是locationName
。
答案 1 :(得分:3)
你的第一种方法可能是
return new Locs().Locations.OrderBy(m => m.Office).Select(l => l.OFFICE).ToList()
您的第二个查询可能不会返回List,而是返回位置
private Location selectAddr(string strLoc)
{
return new Locs().Locations.FirstOrDefault(m => m.OFFICE == strlLoc);
}
或者如果你想要一个ADDRESS列表(这不是很清楚)
private IList<string> selectAddr(string strLoc)
{
return new Locs().Locations.Where(m => m.OFFICE == strlLoc)
.Select(l => l.ADDRESS).ToList();
}
或地点列表
private IList<Location> selectAddr(string strLoc)
{
return new Locs().Locations.Where(m => m.OFFICE == strlLoc)
.ToList();
}
答案 2 :(得分:2)
Sephethus。以上所有答案都是有效的,但我不确定他们是否回答了您的问题。你问的是如何从一行返回多列?
您可以在此处使用匿名类型来提供帮助,例如:
private IList<string> selectAddr(string strLoc)
{
Locs offLocs = new Locs();
var xx = (from l in offLocs.Locations
where l.OFFICE == strLoc
select new { l.Address1, l.Address2, l.County });
return xx.Select(a=>String.Concat(x.Address1, x.Address2, x.County).ToList();
}
但是,您可以进一步简化这一过程,
private IList<string> selectAddr(string strLoc)
{
Locs offLocs = new Locs();
return (from l in offLocs.Locations
where l.OFFICE == strLoc
select String.Concat(l.Address1, l.Address2, l.County)).ToList();
}
或者更好
var offLocs = new Locs();
return offLocs.Where(o=>o.Office = strLoc).Select(l=>String.Concat(l.Address1, l.Address2, l.County)).ToList();
但那只是品味问题!