如何在Dapper中使用IN子句获取字符串或GUID的列表

迪帕克

我正在尝试为IN子句编写一个精简查询,但它无法正常工作,并抛出强制转换错误,提示“将nvarchar值'A8B08B50-2930-42DC-9DAA-776AC7810A0A'转换为数据类型int时转换失败。” 在下面的查询中,Guid转换为string。

public IQueryable<MarketTransaction> GetMarketTransactions(int fleetId, int userId, int rowCount)
{
    //Original EF queries which I am trying to convert to Dapper

    //var fleetAsset = (from logicalFleetNode in _context.LogicalFleetNodes
    //                  where logicalFleetNode.LogicalFleetId == fleetId
    //                  select logicalFleetNode.AssetID).ToList();

    ////This query fetches guid of assetprofiles for which user having permissions based on the assets user looking onto fleet
    //var assetProfileIds = (from ap in _context.AssetProfileJoinAccounts
    //                       where fleetAsset.Contains(ap.AssetProfile.AssetID) && ap.AccountId == userId
    //                       select ap.AssetProfileId).ToList();

    var fleetAsset = _context.Database.Connection.Query<string>("SELECT CONVERT(varchar(36),AssetID) from LogicalFleetNodes Where LogicalFleetId=@Fleetid",
        new { fleetId }).AsEnumerable();

    //This query fetches guid of assetprofiles for which user having permissions based on the assets user looking onto fleet
    var sql = String.Format("SELECT TOP(@RowCount) AssetProfileId FROM [AssetProfileJoinAccounts] AS APJA WHERE ( EXISTS (SELECT " +
                            "1 AS [C1] FROM  [dbo].[LogicalFleetNodes] AS LFN " +
                            "INNER JOIN [dbo].[AssetProfile] AS AP ON [LFN].[AssetID] = [AP].[AssetID]" +
                                " WHERE ([APJA].[AssetProfileId] = [AP].[ID])  " +
                                " AND ([APJA].[AccountId] = @AccountId AND LogicalFleetId IN @FleetId)))");
    var assetProfileIds = _context.Database.Connection.Query<Guid>(sql, new { AccountId = userId, FleetId = fleetAsset, RowCount=rowCount });
马克·格雷韦尔

Dapper执行扩展,因此,如果数据类型匹配,则只需执行以下操作:

LogicalFleetId IN @FleetId

(请注意没有括号)

传入FleetId(通常是通过类似问题的匿名类型)一个明显的数组或列表或类似物。

如果删除括号后它不起作用,则有两个问题要问:

  • 什么是列类型LocalFleetId
  • 局部变量的声明类型是什么fleetAsset(您以传入FleetId)?

更新:测试用例显示它工作正常:

public void GuidIn_SO_24177902()
{
    // invent and populate
    Guid a = Guid.NewGuid(), b = Guid.NewGuid(),
         c = Guid.NewGuid(), d = Guid.NewGuid();
    connection.Execute("create table #foo (i int, g uniqueidentifier)");
    connection.Execute("insert #foo(i,g) values(@i,@g)",
        new[] { new { i = 1, g = a }, new { i = 2, g = b },
        new { i = 3, g = c },new { i = 4, g = d }});

    // check that rows 2&3 yield guids b&c
    var guids = connection.Query<Guid>("select g from #foo where i in (2,3)")
                                                          .ToArray();
    guids.Length.Equals(2);
    guids.Contains(a).Equals(false);
    guids.Contains(b).Equals(true);
    guids.Contains(c).Equals(true);
    guids.Contains(d).Equals(false);

    // in query on the guids
    var rows = connection.Query(
        "select * from #foo where g in @guids order by i", new { guids })
        .Select(row => new { i = (int)row.i, g = (Guid)row.g }).ToArray();
    rows.Length.Equals(2);
    rows[0].i.Equals(2);
    rows[0].g.Equals(b);
    rows[1].i.Equals(3);
    rows[1].g.Equals(c);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Dapper中使用IN子句获取字符串或GUID的列表

来自分类Dev

如何在PHP中使用开始和结束字符获取字符串的子字符串?

来自分类Dev

如何在Play scala中使用slick 3从Rep [String]获取字符串值?

来自分类Dev

如何使用SQL查询从字符串列表中获取字符串

来自分类Dev

如何使用SQL查询从字符串列表中获取字符串

来自分类Dev

R如何获取字符串中的字符列表

来自分类Dev

如何在python中使用正则表达式从括号中获取字符串

来自分类Dev

如何在Jasper Studio中使用MySQL查询从布尔值获取字符串值

来自分类Dev

如何在字符后获取字符串(单词)?

来自分类Dev

如何获取格式字符串中使用的名称列表?

来自分类Dev

从复数获取字符串以在XML中使用?

来自分类Dev

在datagridview中使用foreach获取字符串

来自分类Dev

如何从列表框中获取字符串

来自分类Dev

如何从java列表中获取字符串值

来自分类Dev

如何在Swift中使用字符串获取

来自分类Dev

如何在Swift中使用字符串获取

来自分类Dev

如何从参数中获取字符串并在if语句中使用它?

来自分类Dev

如何从控制器获取字符串并在视图中使用它?

来自分类Dev

如何在Java中的<>之间获取字符串

来自分类Dev

如何在JavaScript中获取字符串的货币

来自分类Dev

如何在符号后获取字符串

来自分类Dev

如何在php中获取字符串的结尾?

来自分类Dev

如何在Oracle SQL查询中使用方括号之间的几行提取字符串

来自分类Dev

如何在读取字符串中使用minibuffer-exit-hook

来自分类Dev

Swift如何使用枚举获取字符串值

来自分类Dev

如何使用strlen函数获取字符串的长度

来自分类Dev

如何使用php从变量中获取字符串?

来自分类Dev

如何使用枚举获取字符串值

来自分类Dev

如何使用php从变量中获取字符串?

Related 相关文章

  1. 1

    如何在Dapper中使用IN子句获取字符串或GUID的列表

  2. 2

    如何在PHP中使用开始和结束字符获取字符串的子字符串?

  3. 3

    如何在Play scala中使用slick 3从Rep [String]获取字符串值?

  4. 4

    如何使用SQL查询从字符串列表中获取字符串

  5. 5

    如何使用SQL查询从字符串列表中获取字符串

  6. 6

    R如何获取字符串中的字符列表

  7. 7

    如何在python中使用正则表达式从括号中获取字符串

  8. 8

    如何在Jasper Studio中使用MySQL查询从布尔值获取字符串值

  9. 9

    如何在字符后获取字符串(单词)?

  10. 10

    如何获取格式字符串中使用的名称列表?

  11. 11

    从复数获取字符串以在XML中使用?

  12. 12

    在datagridview中使用foreach获取字符串

  13. 13

    如何从列表框中获取字符串

  14. 14

    如何从java列表中获取字符串值

  15. 15

    如何在Swift中使用字符串获取

  16. 16

    如何在Swift中使用字符串获取

  17. 17

    如何从参数中获取字符串并在if语句中使用它?

  18. 18

    如何从控制器获取字符串并在视图中使用它?

  19. 19

    如何在Java中的<>之间获取字符串

  20. 20

    如何在JavaScript中获取字符串的货币

  21. 21

    如何在符号后获取字符串

  22. 22

    如何在php中获取字符串的结尾?

  23. 23

    如何在Oracle SQL查询中使用方括号之间的几行提取字符串

  24. 24

    如何在读取字符串中使用minibuffer-exit-hook

  25. 25

    Swift如何使用枚举获取字符串值

  26. 26

    如何使用strlen函数获取字符串的长度

  27. 27

    如何使用php从变量中获取字符串?

  28. 28

    如何使用枚举获取字符串值

  29. 29

    如何使用php从变量中获取字符串?

热门标签

归档