0

我正在使用 WebMatrix C# 构建一个站点,并且有一个包含多个需要从数据库填充的输入字段的页面。我从中提取数据的表具有组合 id/value 列,其中 id 对应于输入字段 id。

该表如下所示,其中 field_data = data field_name = 与输入字段匹配的id

id      doc_id     field_data          field_name
------  -------    -------------       ------------   
45680   1549       Astoria Apartments   q4_1Property
45681   1549       1000                 q11_7Arbor
45682   1549       61 Street            q12_8Other[0][]
45683   1549       Cleveland            q12_8Other[0][1]
45684   1549       Ohio                 q12_8Other[1][]
45685   1549       43589                q12_8Other[1][1]
45686   1549       USA                  q12_8Other[2][]
45687   1549       12                   q12_8Other[2][1]
45688   1549       d                    q12_8Other[3][]
45689   1549       13                   q12_8Other[3][1]

我可以这样做:

var queryinputvalue = "SELECT field_data FROM document_data WHERE field_name = @0 AND doc_id = @1";

<input type="text" class=" form-textbox" id="input_4" name="q4_1Property" size="20" value="@db.QueryValue(queryinputvalue, "q4_1Property", 1549)"/>

但是其中一些表单有超过 100 个输入字段,并且为每个字段进行单独的数据库查询似乎有些过分。

有没有办法对所有数据进行一次查询,然后从该查询中只选择我需要的数据?

如下所示,[] 中的内容应该告诉 WebMatrix 从查询中返回哪一行。

var queryinputvalue = db.Query("SELECT * FROM document_data WHERE doc_id = @1", 1549);

<input type="text" class=" form-textbox" id="input_4" name="q4_1Property" size="20" value="@queryinputvalue.[SELECT row where field_name = 'q4_1Property'].field_data"/>

谢谢你的帮助。

4

1 回答 1

1

你快到了。以下获取所有相关行:

var queryinputvalue = db.Query("SELECT * FROM document_data WHERE doc_id = @0", 1549);

然后您可以使用 Linq To Objects 来查询生成的集合。FirstOrDefault 是您应该为此使用的扩展方法:

var q4_1Property = queryinputvalue.FirstOrDefault(r => r.field_name.Equals("q4_1Property")).field_data;
于 2013-06-19T20:27:28.047 回答