有没有办法在SQL DataContext上调用ExecuteQuery并返回一个Tuple而不是一个类/对象

时间:2016-11-21 22:44:11

标签: c# sql .net linq linq-to-sql

我正在尝试按照以下查询运行:

List<Tuple<int, string>> Details = new List<Tuple<int, string>>();
try
{
   using (DataContext context = new DataContext(connectionString))
   {
      string query = @"SELECT [ID],
                              [NAME]
                       FROM [DB].[dbo].[TABLE]
                       WHERE [OTHER_ID] = {0}";

      Details = context.ExecuteQuery<Tuple<int, string>>(query, otherID).ToList();
   }
}
catch (Exception e)
{
   throw;
}
return Details;

这不起作用,因为ExecuteQuery期望一个具有无参数构造函数的对象。

现在解决这个问题非常简单:创建一个小对象而不是这个元组

OR

放弃DataContext并在SQLConnection上运行查询并在结果上运行Table适配器。

由于项目的性质,我不想也没有。是否有任何东西可以让我将查询结果返回给元组?

2 个答案:

答案 0 :(得分:3)

也许你可以做到这一点(我试过它并且有效):

var cmd = context.Database.Connection.CreateCommand();
int whatever = 0;
cmd.CommandText = "SELECT [ID], [ NAME ] FROM[ DB ].[ dbo ].[ TABLE ] WHERE[ OTHER_ID ] = @Param1 ";
cmd.Parameters.Add( new SqlParameter( "Param1", whatever ) );
List<object> items = new List<object>();
cmd.Connection.Open();
var reader = cmd.ExecuteReader();
while( reader.Read() ) {
    items.Add( Tuple.Create<int, int>((int)reader[0], (int) reader[1]) );
}
return items; // you can cast it here to whatever you want

答案 1 :(得分:1)

不,即使内部具有相同的类型,也没有从匿名类型到元组的隐式转换。