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