首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ExecuteQuery进行Linq

用ExecuteQuery进行Linq
EN

Stack Overflow用户
提问于 2013-07-12 12:06:31
回答 7查看 23.7K关注 0票数 6

我知道错误:

类型'System.Int32[]‘必须声明默认(无参数)构造函数,才能在映射期间进行构造。

密码如下:

代码语言:javascript
复制
var gamePlayRecord = db.ExecuteQuery<int[]>("SELECT UserID, IPID, GameID FROM ArcadeGames WHERE ID = " + gamePlayRecordID).Single();
var userID = gamePlayRecord[0];
var ipID = gamePlayRecord[1];
var gameID = gamePlayRecord[2];

我知道这是错误的,但是有人能告诉我如何在不需要创建一个新对象的情况下正确地完成它吗?

EN

回答 7

Stack Overflow用户

发布于 2013-07-12 12:29:08

此查询的结果不是int[],而是带有数字的一行。

不是很好的解决方案:每个数字都使用:

代码语言:javascript
复制
int userID = db.ExecuteQuery<int>("SELECT UserID FROM ArcadeGames WHERE ID = " + gamePlayRecordID).Single();
int ipID = db.ExecuteQuery<int>("SELECT IPID FROM ArcadeGames WHERE ID = " + gamePlayRecordID).Single();
int gameID db.ExecuteQuery<int>("SELECT GameID FROM ArcadeGames WHERE ID = " + gamePlayRecordID).Single();

或创建sql查询。

代码语言:javascript
复制
db.ExecuteQuery<int>(@"
SELECT UserID FROM ArcadeGames WHERE ID = {0}
UNION ALL
SELECT IPID FROM ArcadeGames WHERE ID = {0}
UNION ALL
SELECT GameID FROM ArcadeGames WHERE ID = {0}", 
gamePlayRecordID).ToList();

或者创建类..。

票数 9
EN

Stack Overflow用户

发布于 2013-07-12 12:48:18

我想我有点误解了这个问题。但正如@goric所解释的: ORM映射者希望将结果映射到一个对象上。如果您不想要对象或类,而不是使用ORM映射器,而是使用基本的SqlDataReader。

代码语言:javascript
复制
SqlCommand command = new SqlCommand("SELECT UserID, IPID, GameID FROM ArcadeGames WHERE ID = " + gamePlayRecordID, connection);
SqlDataReader reader = command.ExecuteReader();
if (reader.Read())
{
  var userID = reader[0];
  var ipID = reader[1];
  var gameID = reader[2];
}
票数 2
EN

Stack Overflow用户

发布于 2013-07-12 12:27:05

ORM检索SQL结果后,尝试创建指定类型的新实例,然后在该类型上查找与查询中选择的列同名的属性。因此,在您的示例中,它试图创建一个新的int[],然后在其上设置名为UserIdIPIdGameId的属性。

这里有几个问题。首先,在创建实例时,默认情况下使用无参数构造函数。int[]没有可以调用的错误,这就是您所看到的错误。假设它有一个,我预计在尝试设置一个名为UserId的属性时,这个代码在实例化它之后会失败。

解决这个问题的一个简单方法是创建自己的类,就像其他人回答的那样。如果您想要一种不需要新类型的方法,可以使用类似于来自Query库的非泛型脱衣舞类的东西(参见Marc在 post中的答案)。实体框架似乎还使用ObjectQueryDbDataRecord类提供了一些类似的功能,如这里所示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17614545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档