根据结果​​

时间:2018-01-22 04:03:36

标签: c# linq

我目前有这个数据集

This is the current dataset

所以,我试图将基于Category Id的数据作为输入返回。但是,如果该类别不存在关键字,则应返回其父级的数据

这是一个例子

输入:202;输出:ParentCategoryID = 201,Name = Operating System, 关键词=教学

这就是我现在所拥有的(testData是数据集)

public static string GetData(int categoryId)
    {
        var searchResult = testData.Where(x => x.CategoryId == categoryId).FirstOrDefault();

        //if has no keywords return parent data
            if(string.IsNullOrEmpty(searchResult.Keywords))
            {
                var parentData = testData.Where(x => x.CategoryId == searchResult.ParentCategoryId);

                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Append("ParentCategoryId=");
                stringBuilder.Append(parentData.ParentCategoryId);
                stringBuilder.Append(", Name=");
                stringBuilder.Append(parentData.Name);
                stringBuilder.Append(", Keywords=");
                stringBuilder.Append(parentData.Keywords);

                return stringBuilder.ToString();
            }

但这仅适用于一位家长。它适用于这种场景

输入:201;输出:ParentCategoryID = 200,Name = Computer, 关键词=教学

我认为我的LINQ查询存在问题,我将不胜感激任何建议

2 个答案:

答案 0 :(得分:0)

简单的while循环可能就是你需要的

std::sort(E.begin(), E.end(), [](const Entry& a, const Entry& b) { return /* whether a should precede b */; } );

答案 1 :(得分:0)

通过递归函数获取父级:

public static WhateverYourDataTypeIs GetParent(int parentCategoryId)
        var parentData = testData.Where(x => x.CategoryId == parentCategoryId).FirstOrDefault();
        if(string.IsNullOrEmpty(parentData.Keywords))
        {
            return GetParent(parentData.ParentCategoryId);
        }
        return parentData;
}

只是打电话给那而不是旧的方式,你得到了父母

// OLD: 
var parentData = testData.Where(x => x.CategoryId == searchResult.ParentCategoryId).FirstOrDefault();
// NEW: 
var parentData = GetParent(searchResult.ParentCategoryId)