C# 我需要创建列表<;a>;包括列表<;t>;里面有很多。任何人都可以为此提供帮助

C# 我需要创建列表<;a>;包括列表<;t>;里面有很多。任何人都可以为此提供帮助,c#,list,C#,List,我有一组数据由于连接到另一个表而重复。我需要删除副本并添加到另一个列表中,每个元素都包含一个元素列表 例如: 我需要将此数据插入列表:list existingQuestions=new list() public类存在的问题 { 公共int Id{get;set;} public int QuestionId{get;set;} 公共字符串QuestionTitle{get;set;} 公共字符串surveytle{get;set;} public int SurveyId{get;set;

我有一组数据由于连接到另一个表而重复。我需要删除副本并添加到另一个列表中,每个元素都包含一个元素列表

例如:

我需要将此数据插入列表:
list existingQuestions=new list()

public类存在的问题
{
公共int Id{get;set;}
public int QuestionId{get;set;}
公共字符串QuestionTitle{get;set;}
公共字符串surveytle{get;set;}
public int SurveyId{get;set;}
公共字符串选项类型{get;set;}
公共IEnumerable标记{get;set;}
}
我把这些数据放在下面的列表中:
IEnumerable existingquestionsResults

并尝试使用下面的算法制作一个列表。但它不会给出预期的结果

private IEnumerable<ExistingQuestionDTO> MakeExistingQuestionSearchableDTO(
    IEnumerable<ExistingQuestionSpResult> existingQuestionSpResults)
{
    int previousQuestionId = 0;
    List<Tag> exitingTags = new List<Tag>();
    List<Tag> newTags = new List<Tag>();
    List<ExistingQuestionDTO> existingQuestions = new List<ExistingQuestionDTO>();
    ExistingQuestionDTO previousExistingQuestionDTO = new ExistingQuestionDTO();

    foreach (var questionSpResult in existingQuestionSpResults)
    {
        if (questionSpResult.QuestionId == previousQuestionId || 
            previousQuestionId == 0)
        {
            //Adding new tag if questionId exist for existing tag
            if (!(newTags.Count == 0))
            {
                exitingTags.AddRange(newTags);
                //Clear newTags array here...
                newTags.Clear();
            }

            //Add Tags for same array.
            if (!(questionSpResult.ColumnName == "NULL"))
            {
                Tag tag = new Tag
                {
                    TagId = (Guid)questionSpResult.TagId,
                    TagName = questionSpResult.ColumnName
                };
                exitingTags.Add(tag);
            }
        }
        else
        {
            //Add Tags for new array with Other Items too...
            exitingTags.Clear();
            newTags.Clear();

            if (!(questionSpResult.ColumnName == "NULL"))
            {
                Tag tag = new Tag
                {
                    TagId = (Guid)questionSpResult.TagId,
                    TagName = questionSpResult.ColumnName
                };
                newTags.Add(tag);
            }
        }

        ExistingQuestionDTO existingQuestionDTO = new ExistingQuestionDTO
        {
            Id = questionSpResult.Id,
            QuestionId = questionSpResult.QuestionId,
            QuestionTitle = questionSpResult.QuestionTitle,
            SurveyId = questionSpResult.SurveyId,
            SurveyTitle = questionSpResult.SurveyTitle,
            OptionType = questionSpResult.OptionType,
            Tags = exitingTags.Count != 0 ? exitingTags : newTags
        };

        if (questionSpResult.QuestionId == previousQuestionId)
        {
            //Update Tag in relevant node...
            //existingQuestions.RemoveAt((int)questionSpResult.QuestionId - 1);
            //existingQuestions.Remove(previousExistingQuestionDTO);
            //existingQuestions.Add(existingQuestionDTO);
            //existingQuestions.Insert(((int)questionSpResult.QuestionId - 1), 
            //    existingQuestionDTO);

            var foundQuestion = existingQuestions.Find(a => 
                a.QuestionId == questionSpResult.QuestionId);
            foundQuestion.Tags = exitingTags;
            existingQuestions[(int)questionSpResult.QuestionId - 1] = foundQuestion;
        }
        else
        {
            existingQuestions.Add(existingQuestionDTO);
        }

        previousQuestionId = questionSpResult.QuestionId;
        previousExistingQuestionDTO = existingQuestionDTO;
    }

    IEnumerable<ExistingQuestionDTO> exitingQuestionList = existingQuestions;
    return exitingQuestionList;
}
private IEnumerable使现有问题可搜索到(
i可数存在的问题(结果)
{
int-previousQuestionId=0;
List exitingTags=新列表();
List newTags=新列表();
列出现有问题=新建列表();
ExistingQuestionDTO前一个ExistingQuestionDTO=新的ExistingQuestionDTO();
foreach(现有问题结果中的var问题结果)
{
如果(questions-spresult.QuestionId==以前的QuestionId | |
previousQuestionId==0)
{
//如果现有标记的questionId存在,则添加新标记
如果(!(newTags.Count==0))
{
exitingTags.AddRange(newTags);
//清除这里的newTags数组。。。
newTags.Clear();
}
//为同一数组添加标记。
如果(!(questionSpResult.ColumnName==“NULL”))
{
标签=新标签
{
TagId=(Guid)问题Result.TagId,
TagName=questionSpResult.ColumnName
};
exitingTags.Add(标签);
}
}
其他的
{
//为新阵列添加标记,同时添加其他项。。。
exitingTags.Clear();
newTags.Clear();
如果(!(questionSpResult.ColumnName==“NULL”))
{
标签=新标签
{
TagId=(Guid)问题Result.TagId,
TagName=questionSpResult.ColumnName
};
新标签。添加(标签);
}
}
ExistingQuestionDTO ExistingQuestionDTO=新的ExistingQuestionDTO
{
Id=问题结果Id,
QuestionId=questionSpResult.QuestionId,
QuestionTitle=questionSpResult.QuestionTitle,
SurveyId=问题Result.SurveyId,
SurveyTitle=问题Result.SurveyTitle,
OptionType=问题结果。OptionType,
Tags=exitingTags.Count!=0?exitingTags:newTags
};
if(questionSpResult.QuestionId==以前的QuestionId)
{
//更新相关节点中的标记。。。
//existingQuestions.RemoveAt((int)QuestionsResult.QuestionId-1);
//现有问题。删除(先前存在的问题到);
//existingQuestions.Add(existingQuestionDTO);
//现有问题。插入((int)questions spresult.QuestionId-1),
//现有问题(DTO);
var foundQuestion=existingQuestions.Find(a=>
a、 QuestionId==QuestionsPreResult.QuestionId);
foundQuestion.Tags=退出标签;
existingQuestions[(int)questions spresult.QuestionId-1]=foundQuestion;
}
其他的
{
existingQuestions.Add(existingQuestionDTO);
}
previousQuestionId=questionSpResult.QuestionId;
previousExistingQuestionDTO=existingQuestionDTO;
}
IEnumerable exitingQuestionList=现有问题;
返回退出问题列表;
}
有人能告诉我哪里出了问题吗


问题ID 3应该有标记。计数=>2。但这里是17。我很困惑。

因为冗余原因没有被正确地逐行提及,它完全是独一无二的,除了问题3,其中状态既关键又重要。因此,首先,你必须为相同的内容添加一个过滤器,看看你是否得到了完全唯一的结果。

FYI,有一个“not equals”操作符,允许你做
if(a!=b)
而不是
if(!(a==b))
(可读性更强)“在这里输入图像描述”是一个指导。请现在就这样做。
private IEnumerable<ExistingQuestionDTO> MakeExistingQuestionSearchableDTO(
    IEnumerable<ExistingQuestionSpResult> existingQuestionSpResults)
{
    int previousQuestionId = 0;
    List<Tag> exitingTags = new List<Tag>();
    List<Tag> newTags = new List<Tag>();
    List<ExistingQuestionDTO> existingQuestions = new List<ExistingQuestionDTO>();
    ExistingQuestionDTO previousExistingQuestionDTO = new ExistingQuestionDTO();

    foreach (var questionSpResult in existingQuestionSpResults)
    {
        if (questionSpResult.QuestionId == previousQuestionId || 
            previousQuestionId == 0)
        {
            //Adding new tag if questionId exist for existing tag
            if (!(newTags.Count == 0))
            {
                exitingTags.AddRange(newTags);
                //Clear newTags array here...
                newTags.Clear();
            }

            //Add Tags for same array.
            if (!(questionSpResult.ColumnName == "NULL"))
            {
                Tag tag = new Tag
                {
                    TagId = (Guid)questionSpResult.TagId,
                    TagName = questionSpResult.ColumnName
                };
                exitingTags.Add(tag);
            }
        }
        else
        {
            //Add Tags for new array with Other Items too...
            exitingTags.Clear();
            newTags.Clear();

            if (!(questionSpResult.ColumnName == "NULL"))
            {
                Tag tag = new Tag
                {
                    TagId = (Guid)questionSpResult.TagId,
                    TagName = questionSpResult.ColumnName
                };
                newTags.Add(tag);
            }
        }

        ExistingQuestionDTO existingQuestionDTO = new ExistingQuestionDTO
        {
            Id = questionSpResult.Id,
            QuestionId = questionSpResult.QuestionId,
            QuestionTitle = questionSpResult.QuestionTitle,
            SurveyId = questionSpResult.SurveyId,
            SurveyTitle = questionSpResult.SurveyTitle,
            OptionType = questionSpResult.OptionType,
            Tags = exitingTags.Count != 0 ? exitingTags : newTags
        };

        if (questionSpResult.QuestionId == previousQuestionId)
        {
            //Update Tag in relevant node...
            //existingQuestions.RemoveAt((int)questionSpResult.QuestionId - 1);
            //existingQuestions.Remove(previousExistingQuestionDTO);
            //existingQuestions.Add(existingQuestionDTO);
            //existingQuestions.Insert(((int)questionSpResult.QuestionId - 1), 
            //    existingQuestionDTO);

            var foundQuestion = existingQuestions.Find(a => 
                a.QuestionId == questionSpResult.QuestionId);
            foundQuestion.Tags = exitingTags;
            existingQuestions[(int)questionSpResult.QuestionId - 1] = foundQuestion;
        }
        else
        {
            existingQuestions.Add(existingQuestionDTO);
        }

        previousQuestionId = questionSpResult.QuestionId;
        previousExistingQuestionDTO = existingQuestionDTO;
    }

    IEnumerable<ExistingQuestionDTO> exitingQuestionList = existingQuestions;
    return exitingQuestionList;
}