嗨我想从我的int数组中找到list.contains基本上我匹配来自我的int数组的列表项
int[] questionName =
{
19294,
19300,
20575,
20826,
20827
};
var ans = (from answer in db.tblAnswers
where answer.tblQuestion.bIsRequired == true
&& questionName.Contains(Convert.ToInt32(answer.nQuestionID))
&& (answer.strAnswer!=" " || answer.strAnswer.Trim()==string.Empty)
&& answer.nQuestionnnaireId==Convert.ToInt32(Session["FormId"].ToString())
select answer).ToList();
List<int> list = new List<int>();
foreach (var i in ans) list.Add(i.nID);
if (list.Contains(Convert.ToInt32(questionName)))
{
PopulateSurvey();
}
但是当我运行页面时,我得到了运行时错误
附加信息:无法转换'System.Int32 []'类型的对象 输入'System.IConvertible'。
我想在我的int数组中匹配我的linq查询中的id。如果有办法,请告诉我。
答案 0 :(得分:1)
我不确定,但如果从PopulateSurvey
中包含从数据库中检索到的任何,那么看起来您需要调用questionName
。在这种情况下,您可以执行以下操作:
if(list.Intersect(questionName).Any())
PopulateSurvey();
其他建议:如果您需要的只是id,请不要从数据库中检索整个记录。所以:var list = ... select answer.nId
(而不是select answer
),请注意,通过这样做,您不再需要手动生成列表。
更新:如果您需要list
中包含questionName
中的所有项目,请使用以下内容(OrderBy
是必需的,因为{{ 1}}要求两个列表中的项目顺序相同):
SequenceEqual
答案 1 :(得分:1)
问题出在
行 list.Contains(Convert.ToInt32(questionName))
由于questionName为int[]
(数组),因此您无法将其转换为单个int
。您可能想要找出
如果list
包含所有 questionName
值(可能还有更多项)
list.Intersect(questionName).OrderBy(x => x).SequenceEqual(questionName.OrderBy(x => x))
如果list
包含至少一个 questionName
值
list.Intersect(questionName).Any()
答案 2 :(得分:0)
你应该遍历'questionName'数组。
然后对于其中的每个项目,检查列表是否包含它。
或者使用Linq,您可以将questionName转换为带有ToList的列表。在那之后你可以做一些魔术。
答案 3 :(得分:0)
你的问题就在这一行
if (list.Contains(Convert.ToInt32(questionName))) //you are trying to convert an array to int
如果要检查如果questionName是列表的子集,则将条件更改为以下
if (!questionName.Except(list).Any())