如何处理Dapper返回键值对与LINQ中的Dynamic

时间:2017-04-03 05:48:23

标签: c# linq dapper dapper-extensions

我是Dapper的新手。让我解释一下我想要实现的目标。我有简单的查询,它从DB返回列,我不想创建实体(属性)类来填充数据。我想为此使用动态类型。以下是我的代码:

public dynamic GetABC(int year)
    {

        using (var db = new MySql.Data.MySqlClient.MySqlConnection(ClsConnectionString.connectionString))
        {

            string query = string.Format(@"SELECT * FROM ranking where YEAR(eventdate)='{0}') ORDER BY eventdate DESC, eventid ASC",year);
            //return db.Query<RankingEntity>(query, commandType: System.Data.CommandType.Text).AsList();
            var a = (IEnumerable<dynamic>)db.Query(query, null, null, true, null, CommandType.Text).ToList();
            return a;
       }
    }

它返回键值对。如下: Dapper Row

有没有办法,我只写一个常用的方法来获取List作为“Property”=“Value”正如我们通常在使用任何实体类时得到的那样。

我不确定,如果它是可以实现的,但我希望了解它是否可行并希望在我们的应用程序中实现。

我可以通过我不想要的dapperrows实现循环来实现这一点。因为如果有10000行循环将迭代10000次。

提前致谢。

1 个答案:

答案 0 :(得分:4)

正如我所提到的,IDictionary<string,object>是Dapper的内部类,可以直接强制转换为IDictionary,因为它实现了var a = db.Query(query, null, null, true, null, CommandType.Text).Select(x => x as IDictionary<string,object>); 接口。你所要做的就是:

IEnumerable<IDictionary<string,object>>

现在结果将是IEnumerable类型,可以用来提取所有必需的信息,因为列名是键,相应的行值是 var a = (IEnumerable<IDictionary<string,object>>)db.Query(query, null, null, true, null, CommandType.Text); 中每个元素的值。 / p>

同时检查,这可能也有效,但我不确定:

public class Page1 extends AppCompatActivity implements OnMapReadyCallback,location.LocationListener {



    @Override
            public void onLocationChanged(Location location)
            {
    CameraPosition position = new CameraPosition.Builder()
                                .target(new LatLng(Location.getLatitude, Location.getLongitude))
                                .zoom(17).build();
                        mMap.animateCamera(CameraUpdateFactory.newCameraPosition(position));
            }
    }