[英]Use LINQ to get a items in a list
我正在使用C#VS2013 Express,希望獲得一些幫助來編寫LINQ語句。
每個MapCompany都有一個MapLocations列表,並且MapCompany和MapLocation都有一個userName字段。
這是我的代碼:
IEnumerable<CanFindLocation.Models.MapCompany> mapCompanies = await db.mapCompanies.Where(mc => mc.userName.Equals(userName)).ToListAsync();
List<MapLocation> mapLocations = new List<MapLocation>();
foreach (var mapCompany in mapCompanies)
{
foreach (var mapLocation in mapCompany.mapLocations)
{
if (mapLocation.userName.Equals(userName))
{
mapLocations.Add(mapLocation);
}
}
}
我是LINQ的新手,並且想編寫LINQ語句,該語句將獲取具有特定userName的所有MapLocations。
我上面的代碼可以正常工作,但是我需要一些幫助,請將其編碼為LINQ語句。
如果我沒錯的話,
IEnumerable<CanFindLocation.Models.MapCompany> mapCompanies = await db.mapCompanies.Where(mc => mc.userName.Equals(userName)).ToListAsync();
var mapLocations = mapCompanies.SelectMany(mapCompany => mapCompany.mapLocations)
.Where(mapLocation => mapLocation.userName.Equals(username));
或Marcel B在評論中建議的查詢語法:
var mapLocations = from mapCompany in mapCompanies
from mapLocation in mapCompany.mapCompanies
where mapLocation.userName.Equals(username)
select mapLocation;
而且,當然,我會在這種情況下以及其他情況下做到這一點,但是如果您通常在編寫這樣的LINQ表達式時遇到麻煩,則也可以使用yield return
模式。 同樣,我不會在這里,但我也會包括在內。
public IEnumerable<MapLocation> GetLocations(IEnumerable<CanFindLocation.Models.MapCompany> mapCompanies)
{
foreach (var mapCompany in mapCompanies)
{
foreach (var mapLocation in mapCompany.mapLocations)
{
if (mapLocation.userName.Equals(userName))
{
yield return mapLocation;
}
}
}
}
顯然,這不能解決您的問題,我的第一個代碼塊可以解決此問題,但這仍將是一種更干凈,通常更好的方法,因為它可以使您受益於IEnumerable<T>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.