Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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# 使用动态where参数从中获取数据_C#_Database_Linq - Fatal编程技术网

C# 使用动态where参数从中获取数据

C# 使用动态where参数从中获取数据,c#,database,linq,C#,Database,Linq,数据库中的一个表,包含Id、Word和CONVERTIVE三列(在“Word”和“CONVERTIVE”下面的上下文中,是表中的实际数据/值) Word中的值通过控制器中的LINQ查询获得,并发送到视图,以列表形式显示。在单词旁边有一个@EditorFor,用户应该在那里键入相反的内容 在视图中,DisplayFor(即Word)和EditorFor(输入框)得到一个从零开始的索引。用户输入被发送到作为参数传递模型的控制器。从模型中找到猜测的对立面,并将其放入列表中,然后与另一个列表进行比较,该

数据库中的一个表,包含Id、Word和CONVERTIVE三列(在“Word”和“CONVERTIVE”下面的上下文中,是表中的实际数据/值)

Word中的值通过控制器中的LINQ查询获得,并发送到视图,以列表形式显示。在单词旁边有一个
@EditorFor
,用户应该在那里键入相反的内容

在视图中,DisplayFor(即Word)和EditorFor(输入框)得到一个从零开始的索引。用户输入被发送到作为参数传递模型的控制器。从模型中找到猜测的对立面,并将其放入
列表中,然后与另一个
列表
进行比较,该列表包含列
Word`中的实际值

到目前为止,我可以从
@ÈditorFor
获取用户输入,从我拥有的数据中,我可以获得正确猜测的
对立面
和错误猜测的
对立面
。但是我无法从
Word
列的
对立面的同一行中获得正确或错误的值

相反的是

var list = oppositeListFromDB.Except(guessesFromUser);
我最初的想法是使用正确相反的值进行另一个LINQ查询,然后选择匹配的单词。为了澄清用户是否在第5行和第6行猜错了,在列表中使用单词“Dry”和“Old”作为where参数。但是参数必须是动态的,我该如何解决这个问题呢?我试过下面这样的方法,但不起作用。我的想法是正确的还是有更好的方法

var q = from a in db.Table
        where a.Opposite.Contains(list)
        select a.Word;
使用MVC5并具有如下模型,该列表用于项目的另一部分。顺便说一句,我能用它来解决我的问题吗

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      |
+----+-------+----------+
公共类MyModel
{
公共字符串字{get;set;}
与{get;set;}相对的公共字符串
公共列表mWords{get;set;}
}
公共类WordCL
{public int Id{get;set;}
公共字符串字{get;set;}
与{get;set;}相对的公共字符串
}
+----+-------+----------+
|ID |单词|相反|
+----+-------+----------+
|1 |雨|日|
|2 |干净|脏|
|3 |浅|暗|
|4 |热|冷|
|5 |湿|干|
|6 |年轻|年老|
+----+-------+----------+
其中,
word
是向用户显示的值,
foo
是用户输入的值


其中,
word
是向用户显示的数据,
foo
是用户输入的值。

我很难想象您有哪些可用数据以及您试图收集哪些数据

可以使用匿名类型对象选择您感兴趣的字段:

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 list.Contains(a.Contains)
,否则您将调用字符串上的
Contains

我很难想象您有哪些可用数据以及您试图收集哪些数据

可以使用匿名类型对象选择您感兴趣的字段:

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 list.Contains(a.Contains)
,否则你会在字符串上调用
Contains

有id输入的输入字段,这样它就可以与正确的单词匹配,这样你就可以得到
id
,然后得到
单词
?我更新了我的帖子,因为我把它搞错了,这个“id”实际上是与数据库无关的索引。有id输入的输入字段,因此它可以与正确的单词匹配,这样你就可以得到
id
,然后得到
Word
?我更新了我的帖子,因为我把它搞错了,“id”“实际上是与数据库无关的索引。我不熟悉lambda,所以除了
if语句
检查
Word
列中是否有与显示的单词匹配的值,以及
contract
列中是否有与用户输入匹配的值外,我对lambda一无所知。对的我删除了
if语句
并将
var bar=!db…
并且无论用户输入如何,它都为med提供true和false。我需要实际的词语/价值观。也许我误解了?我已经更新了我的OP btw bc,我意识到它是正确的。这有关系吗?关于if声明你是对的。现在我想你给用户提供了一个词,他们输入了他们认为相反的词。如果他们错了,你会通知他们,对吗?我再次更新了我的OP,因为我不太清楚我想对数据做什么或可以做什么。这一行将帮助你从用户db.Table.AsEnumerable()输入的相反词中获取单词。其中(x.contract==guessed)。FirstOrDefault();。现在,FirstOrDefault()将返回模型(如果存在),否则返回null。这就是空检查的原因。然后,为了得到对应的相反的单词,你只需做(建模)相反的单词;我觉得某个地方出了点问题,可能是我自己的问题,我漏掉了一些东西。第一个查询中的
word
没有得到任何值,我认为只有字符串本身的名称空间和类名。但我把它从IEnumerble、tolist和tostring转换过来了,也许它在什么地方出了问题。第一个查询中的x应该是x=>。相反,对吗?无论如何,我通过使用用户apks最后一行代码解决了这个问题。不过还是要谢谢你,我真的很感激!我不熟悉lambda,所以除了
if语句
检查
Word
列中是否有与显示的单词匹配的值,以及
对向
列中是否有与用户输入匹配的值之外,我不完全理解。对的我删除了
if语句
并将
var bar=!db…
并且无论用户输入如何,它都为med提供true和false。我需要实际的词语/价值观。也许我误解了?我已经更新了我的OP btw bc,我意识到它是正确的。这有关系吗?关于if声明你是对的。现在我想你
where a.Opposite.Contains(list)