获取数组linq中的多个字段
本文关键字:字段 数组 linq 获取 | 更新日期: 2023-09-27 17:58:07
在我的应用程序中,一个用户可以有多个位置。我想在下拉列表中显示用户的所有位置。我创建了一个具有两个字段UserID
和Locations
的模型。位置是字符串数组。我想要一个Linq查询来获取UserID
和它们的Locations
。在林克有可能吗?
public partial class ModelLocation
{
public int UserID { get; set; }
public string[] Locations{ get; set; }
}
在我的数据库中,记录就像
UserID Location
1 A
1 B
2 A
3 B
3 C
3 D
var models = db.Locations.GroupBy(l => l.UserId)
.Select(l => new ModelLocation()
{
UserID = l.Key,
Locations = l.Select(l => l.Location).ToArray()
});
根据您使用的linq引擎(linq-to-sql,linq-to-entities),查询可能会获得非常糟糕的性能,并导致多个查询被发送到数据库。解决这个问题的一种方法是首先从DB中检索数据,然后通过引入对AsEnumerable()
的调用在内存中执行分组。
var models = db.Locations.AsEnumerable().GroupBy(l => l.UserId)
.Select(l => new ModelLocation()
{
UserID = l.Key,
Locations = l.Select(l => l.Location).ToArray()
});
如果您想使用Where()
进行任何筛选,则应在调用AsEnumerable()
以在DB中完成筛选之前执行。
您可以使用.SelectMany()
来实现这样的输出:
var locations = modelLocations.SelectMany(x => x.Select(location => new { x.UserID, location }));
试试这个:
var query = db.UserLocations
.GroupBy(l => l.UserID)
.Select(g =>
new ModelLocation
{
UserID = g.Key,
Locations = g.Select(l => l.Location).ToArray()
});
// these are the raw db objects
List<Record> records = new List<Record>();
var modelLocations = records.GroupBy(i => i.UserID).Select(g => new ModelLocation {
UserID = g.Key,
Locations = g.Select(j => j.Location).ToArray()
});