簡體   English   中英

使用LINQ獲取列表中的項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM