Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回其中一个';s项等于一个值_C#_Linq - Fatal编程技术网

C# 返回其中一个';s项等于一个值

C# 返回其中一个';s项等于一个值,c#,linq,C#,Linq,当前,此代码将搜索所有组,并返回一个CameraItem,其中uniqueID等于某物 我希望代码返回CameraItem的组(CameraGroup) 返回CameraItem的代码: public static async Task<CameraItem> GetItemAsync(string uniqueId) { await _sampleDataSource.GetSampleDataAsync(); // Simple linear search is

当前,此代码将搜索所有组,并返回一个CameraItem,其中uniqueID等于某物

我希望代码返回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;
}
公共静态异步任务GetItemAsync(字符串唯一ID)
{
wait_sampleDataSource.GetSampleDataAsync();
//对于小数据集,简单线性搜索是可以接受的
var matches=_sampleDataSource.Groups.SelectMany(group=>group.Items)。其中((item)=>item.Id.Equals(uniqueId));
if(matches.Count()==1)返回matches.First();
返回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;
}
公共静态异步任务GetItemGroupAsync(字符串唯一ID)
{
wait_sampleDataSource.GetSampleDataAsync();
//对于小数据集,简单线性搜索是可以接受的
var matches=_sampleDataSource.Groups.SelectMany(group=>group.Items)。其中((item)=>item.Id.Equals(uniqueId));
如果(匹配.Count()==1)
{
//这里有什么?
//这会是对var匹配的修改吗?
}
返回null;
}

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

此处,
匹配项将包含至少有一个项目匹配的所有组
唯一ID

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;
}

谢谢这是可行的,但我需要用Items.FirstorDefault替换Items.Any-是否有理由使用Items.Any?@ForeverLearning:如果您使用上述代码,这有点奇怪<如果任何项的谓词(即lambda)为true,则code>Any
返回true。该键返回一个布尔值,即
后面的位置<另一方面,code>FirstOrDefault
返回该项的实例,可能是
CameraItem
。这在where中是不可接受的,除非您将其与您的已知项进行比较。在这种情况下,如果该组没有将该项作为其第一项,您可能会遇到问题。抱歉,更正,我指的是组。Where。我把它改成了FirstOrDefault,因为我得到了一个明确的转换错误啊,我们当时的想法是一样的。好!!
static async Task<CameraGroup> GetItemGroupAsync(string uniqueId)
{
    await _sampleDataSource.GetSampleDataAsync();

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