数据库中包含三列的表,Id,Word,Opposite(在“Word”和“Opposite”下面的上下文中是表中的实际数据/值)
来自Word的值是通过控制器中的LINQ查询得到的,并发送到视图并显示为列表。在Word旁边有一个@EditorFor
,用户应该输入相反的内容。
在视图中,DisplayFor(即Word)和EditorFor(输入框)获得从零开始的索引。用户输入被发送到控制器,该控制器将模型作为参数传递。从模型中找到猜测的对立面,并将其放入List<string> and is compared to another
列表that contains the actual values from the column
Word`中。
截至目前,我可以从@ÈditorFor
获取用户输入,并且从我拥有的数据中我可以得到正确的猜测Opposites
和错误的猜测Opposites
。但我无法从同一行Word
中获取Opposite
列中的值,无论是正确还是错误。
对面就像是
var list = oppositeListFromDB.Except(guessesFromUser);
我最初的想法是使用正确相反的值进行另一个LINQ查询并选择匹配的Word。澄清如果用户在第5行和第6行猜错,单词“Dry”和“Old”将用作列表中的where参数。但参数必须是动态的,我该如何解决这个问题呢?我尝试了类似下面的东西,但它不起作用。我是否正确思考或有更好的方法?
var q = from a in db.Table
where a.Opposite.Contains(list)
select a.Word;
使用MVC 5并拥有如下所示的模型,List用于项目的另一部分。我可以在这里使用它来解决我的问题吗?
public class MyModel
{
public string Word { get; set; }
public string Opposite { get; set; }
public List<WordCl> mWords { get; set; }
}
public class WordCL
{ public int Id { get; set; }
public string Word { get; set; }
public string Opposite { get; set; }
}
+----+-------+----------+
| ID | Word | Opposite |
+----+-------+----------+
| 1 | Rain | Sun |
| 2 | Clean | Dirty |
| 3 | Light | Dark |
| 4 | Hot | Cold |
| 5 | Wet | Dry |
| 6 | Young | Old |
+----+-------+----------+
答案 0 :(得分:1)
var guessed = foo;
var opposite = db.Table.AsEnumerable().Where(x.Opposite == guessed).FirstOrDefault();
id(opposite != null)
{
//to get the word from the opposite
var wordFromOpposite = opposite.Word;
if(!db.Table.AsEnumerable().Any(x => x.Word == word && x.Opposite == guessed))
{
...Notify the user he guessed wrong
}
}
其中word
是向用户显示的内容,foo
是用户输入的值。
答案 1 :(得分:1)
我很难想象您可以获得哪些数据以及您尝试收集哪些数据。
您可以使用匿名类型对象选择您感兴趣的字段:
var result = from a in db
where a.Word == "..."
select new { a.Opposite, a.Word };
foreach (var r in result)
{
Console.WriteLine(r.Opposite);
Console.WriteLine(r.Word);
}
顺便说一下(不能发表评论):
where a.Opposite.Contains(list)
不应该是where list.Contains(a.Opposite)
,否则你就会在字符串上调用Contains
吗?