返回一个组,其中一个项等于一个值

时间:2013-12-09 21:18:29

标签: c# linq

目前,此代码将搜索所有组,并返回唯一ID等于某个内容的CameraItem。

我想要的是我希望代码返回CameraItem的组(CameraGroup)。

返回CameraItem的代码:

public static async Task<CameraItem> GetItemAsync(string uniqueId)
{
    await _sampleDataSource.GetSampleDataAsync();
    // Simple linear search is acceptable for small data sets
    var matches = _sampleDataSource.Groups.SelectMany(group => group.Items).Where((item) => item.Id.Equals(uniqueId));
    if (matches.Count() == 1) return matches.First();
    return null;
}

我尝试返回CameraGroup:

public static async Task<CameraGroup> GetItemGroupAsync(string uniqueId)
{
    await _sampleDataSource.GetSampleDataAsync();
    // Simple linear search is acceptable for small data sets
    var matches = _sampleDataSource.Groups.SelectMany(group => group.Items).Where((item) => item.Id.Equals(uniqueId));
    if (matches.Count() == 1)
    {
        // Something here?
        // Would it be a modification of var matches?
    }

    return null;
}

我需要修改什么来返回CameraItem的CameraGroup?

1 个答案:

答案 0 :(得分:2)

此处,matches将包含至少有一个项目符合uniqueId的所有群组:

static async Task<CameraGroup> GetItemGroupAsync(string uniqueId)
{
    await _sampleDataSource.GetSampleDataAsync();

    var matches = _sampleDataSource.Groups
        .Where(group => group.Items.Any(item => item.Id.Equals(uniqueId)));

    return matches.Count() == 1 ? matches.First() : null;
}

您可以考虑使用FirstOrDefault()SingleOrDefault()代替Count() == 1检查 - 让我觉得更清洁一点:

static async Task<CameraGroup> GetItemGroupAsync(string uniqueId)
{
    await _sampleDataSource.GetSampleDataAsync();

    return _sampleDataSource.Groups
        .SingleOrDefault(group =>
                        group.Items.Any(item => item.Id.Equals(uniqueId)));
}