目前,此代码将搜索所有组,并返回唯一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?
答案 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)));
}