我正在尝试按照以下查询运行:
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适配器。
由于项目的性质,我不想也没有。是否有任何东西可以让我将查询结果返回给元组?
答案 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)
不,即使内部具有相同的类型,也没有从匿名类型到元组的隐式转换。