【问题标题】:Select multiple times using LINQ based on result根据结果​​使用 LINQ 多次选择
【发布时间】:2018-01-22 12:45:04
【问题描述】:

我目前有这个数据集

This is the current dataset

所以,我试图根据类别 ID 作为输入返回数据。但是如果该类别没有关键字,则应返回其父级的数据

这是一个例子

输入:202;输出:ParentCategoryID=201,名称=操作系统, 关键字=教学

这就是我现在拥有的(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,名称=计算机, 关键字=教学

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

【问题讨论】:

  • 听起来你需要循环或递归

标签: c# linq


【解决方案1】:

你可能需要一个简单的 while 循环

int input = 202;
bool flag = true;
var result = datalist.Where(q => q.CatId == input).FirstOrDefault();
var parrent = datalist.Where(q => q.CatId == result.ParrentId).FirstOrDefault();

var keyword = "";
while (String.IsNullOrEmpty(parrent.Keyword))
{
    parrent = datalist.Where(q => q.CatId == parrent.ParrentId).FirstOrDefault();
}
keyword = parrent.Keyword;

【讨论】:

    【解决方案2】:

    通过递归函数获取父级:

    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)
    

    【讨论】:

      猜你喜欢
      • 2022-08-05
      • 2019-05-17
      • 1970-01-01
      • 2011-09-29
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      相关资源
      最近更新 更多