我的代码:
var db = Database.Open("dbase");
var result = db.Query("SELECT event_id, description, title, event_start, event_end
FROM event
WHERE event_start >= "+ start + " AND event_end <= "+ @end);
foreach(var record in result)
{
CalendarEvent cevent = new CalendarEvent();
cevent.id = result.event_id; //error is thrown here
}
错误讯息:
CS1061:'System.Collections.Generic.IEnumerable'没有 包含'event_id'的定义,没有扩展方法'event_id' 接受第一个类型的参数 可以找到'System.Collections.Generic.IEnumerable'(是 你错过了使用指令或程序集引用?)
在我的代码中,我有:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using WebMatrix.Data;
造成这种情况的原因是什么?
答案 0 :(得分:3)
首先,您可能需要record.event_id
而不是result.event_id
。如果您将result
更改为results
,则代码会更清晰,因为它是结果的序列。
然而,这只是将问题转移到一个阶段。 Database.Query
会返回IEnumerable<object>
,因此record
的类型将为object
...而object
没有名为{{1}的成员或者。
event_id
的文档很模糊 - 虽然它可能会返回动态对象。试试这个:
Database.Query
编辑:如果foreach (dynamic record in result)
{
CalendarEvent cevent = new CalendarEvent();
cevent.id = record.event_id;
}
即使工作而转换为record.event_id
,那么有效结果类型可能是{{1}和MSDN没有太大的帮助。
但是,代码中仍然存在问题:将参数值直接包含在SQL中是个坏主意:
相反,您应该使用参数化查询,如下所示:
dynamic
答案 1 :(得分:1)
不应该
cevent.id = result.event_id; //error is thrown here
是
cevent.id = record.event_id;
如果有的话?
答案 2 :(得分:1)
cevent.id = result.event_id; //error is thrown here
应该是:
cevent.id = record.event_id;
答案 3 :(得分:1)
您可能需要
cevent.id = record.event_id;