Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用linq查询分别从列表中获取键和值_C#_Asp.net_Linq_Key Value - Fatal编程技术网

C# 如何使用linq查询分别从列表中获取键和值

C# 如何使用linq查询分别从列表中获取键和值,c#,asp.net,linq,key-value,C#,Asp.net,Linq,Key Value,我开始使用随机数组进行我正在做的一个测验,但在我完成这项工作后,我意识到我无法跟踪用户选择的答案。我已经被演示了如何使用一些洗牌算法,但它只是把我弄糊涂了 所以我决定创建一个列表来保存数据集中的答案,键是数据集行的字符串,值是整数,正确答案为1,错误答案为0 我现在做的是,我用css对四个按钮进行了样式化,我将按钮文本转换为四个答案之一。这听起来像是糟糕的编程实践,但这是我唯一能想到的,那就是将tab order属性更改为1或0,这样我就可以跟踪答案,并在结果页面的最后显示出来 我使用的代码是

我开始使用随机数组进行我正在做的一个测验,但在我完成这项工作后,我意识到我无法跟踪用户选择的答案。我已经被演示了如何使用一些洗牌算法,但它只是把我弄糊涂了

所以我决定创建一个
列表
来保存数据集中的答案,键是数据集行的字符串,值是整数,正确答案为1,错误答案为0

我现在做的是,我用css对四个按钮进行了样式化,我将按钮文本转换为四个答案之一。这听起来像是糟糕的编程实践,但这是我唯一能想到的,那就是将tab order属性更改为1或0,这样我就可以跟踪答案,并在结果页面的最后显示出来

我使用的代码是

ds = MyDs(1);

System.Random rnd = new System.Random();

var QA = new List<KeyValuePair<string,int>>();

QA.Add(new KeyValuePair<string, int>(ds.Tables[0].Rows[0]["CorrectAnswer"].ToString(),1));
QA.Add(new KeyValuePair<string, int>(ds.Tables[0].Rows[0]["WrongAnswer1"].ToString(), 0));
QA.Add(new KeyValuePair<string, int>(ds.Tables[0].Rows[0]["WrongAnswer2"].ToString(), 0));
QA.Add(new KeyValuePair<string, int>(ds.Tables[0].Rows[0]["WrongAnswer3"].ToString(), 0));

var myQa = QA.OrderBy(c=> rnd.Next()).Select(c=>c.Key.ToString()).ToList();

Label5.Text = ds.Tables[0].Rows[0]["Question"].ToString();

Button1.Text = myQa[0].ToString();
Button2.Text = myQa[1].ToString();
Button3.Text = myQa[2].ToString();
Button4.Text = myQa[3].ToString();
然后我的按钮文本将键和值添加到文本中,我不希望这样,我只希望键显示在按钮文本中,然后能够访问它的值

有什么想法或者我在哪里遗漏了什么吗?我假设它在我的查询中,我不确定如何修复它


谢谢

基本上,你需要一本
字典

在这里:

var myQa=QA.OrderBy(c=>rnd.Next()).Select(c=>c.Key.ToString()+c.Value.ToString()).ToList()

您同时选择了
及其
。相反,您只需执行以下操作:

var myQa=QA.OrderBy(c=>rnd.Next()).Select(c=>c.Key.ToString()).ToList()以获取密钥


var kValue=QA.Where(m=>m.Key==“正确答案”).FirstOrDefault()值实际上,您可以使用ToDictionary方法而不是ToList。它接受键选择器和值选择器参数。还有你能做到的

   var myQa = QA.OrderBy(c=> rnd.Next()).ToDictionary(ks=>ks.Key.ToString(), vs=>vs..Value.ToString());
   foreach(var keyValuePair in myQa)
   {
       Button button = new Button();
       button.Text = keyValuePair.Key;
       button.Tag= keyValuePair.Value;
       SomeParentControl.Controls.Add(button);
   }
这样,您将在一个枚举中同时拥有键和值

您也可以这样做:

   var myQaButtons = QA.OrderBy(c=> rnd.Next()).Select(c=>new Button{Text = c.Key, Tag = c.Value}).ToList();
   myQaButtons.ForEach(b=>SomeParentControl.Controls.Add(b));
或者干脆

   var myQa = QA.OrderBy(c=> rnd.Next()).Select(c=>new {c.Key, c.Value}).ToList();

   Button1.Text = myQa[0].Key;
   Button1.Tag = myQa[0].Value
   Button2.Text = myQa[1].Key;
   Button2.Tag = myQa[1].Value;
   Button3.Text = myQa[2].Key;
   Button3.Tag = myQa[2].Value;
   Button4.Text = myQa[3].Key;
   Button4.Tag = myQa[3].Value;

我把它改成了字典列表,但仍然不知道如何获取值。这是我第一次使用这种类型的集合,所以如果我不完全理解,请原谅。我看了你的编辑,我是否需要对错误答案1、错误答案2和错误答案3进行相同的查询?如果是这样,那么我如何确定正确的值指向正确的键?还是我误解了您?我尝试了您的编辑建议,当我逐步浏览代码时,我注意到正确答案的值为0,应该为1。当您尝试编辑问题时,您可以在选项卡条上看到各种按钮。其中一个说
Image
使用它。好的,我刚刚添加了它。我添加了手表,这样你可以在我穿过它后看到。这我理解,好吧,我简单地理解了后面的部分。我只是按照您的建议尝试了一下,但是没有myQa[0]。Key或myQa.Value非常感谢您就此回复我,我不确定您是否会,我很感激您这么做:)我刚刚检查了代码,我使用了标签而不是按钮标签,asp按钮,据我所知,没有该属性,(按钮标签属性是WinForms中的一个特性)但是它工作得非常好,再次感谢,这是一个很大的帮助。
   var myQa = QA.OrderBy(c=> rnd.Next()).Select(c=>new {c.Key, c.Value}).ToList();

   Button1.Text = myQa[0].Key;
   Button1.Tag = myQa[0].Value
   Button2.Text = myQa[1].Key;
   Button2.Tag = myQa[1].Value;
   Button3.Text = myQa[2].Key;
   Button3.Tag = myQa[2].Value;
   Button4.Text = myQa[3].Key;
   Button4.Tag = myQa[3].Value;