查询返回的Kotlin元组

问题描述 投票:0回答:2

我正在使用会议室数据库,我想以kotlin Tuple的形式查询表列。有人可以帮我吗?

所以我有一个名为User的表,它具有多个字段,现在我要查询2个特定的字段first_namelast_name和Kotlin Tuples(Pair)


@Entity(tableName = "user")
data class User(
   var id: String,
   var first_name: String,
   var last_name: String
   // some other fields
)

@Dao
interface UserDao {

   @Query("SELECT first_name as first, last_name as second FROM user WHERE id = :id")
   fun getUserName(id: String): Pair<String, String>
}


我收到如下所示的编译器错误:

Not sure how to convert a Cursor to this method's return type (kotlin.Pair<java.lang.String,java.lang.String>)
android android-room android-architecture-components
2个回答
1
投票

这是实现它的方法。

为元组创建类。包括所有要获取的字段。在您的情况下,名字和姓氏是字段。这个概念称为返回列的子集

UserNameTuple

data class UserNameTuple(
    @ColumnInfo(name = "first_name") val firstName: String?,
    @ColumnInfo(name = "last_name") val lastName: String?
)

设计这样的查询:

@Query("SELECT first_name, last_name FROM user WHERE id = :id")
fun getUserName(id: String): List<UserNameTuple>

您将使用元组数据获得满足查询条件的数据。

这是在应用程序中实现它的方式。


0
投票

您也可以在用户类中使用辅助构造函数,如下所示:

constructor(first_name: String, last_name: String) : this("", first_name, last_name)

或者因为您有更多字段,所以您可以使用默认值来避免使用第二个构造函数,如下所示:[我放“”,您可以根据需要进行更改]:

data class User(
   var id: String = "",
   var first_name: String = "",
   var last_name: String = ""
   // some other fields
)

并像这样修改getUserName

@Query("SELECT first_name, last_name FROM user WHERE id = :id")
fun getUserName(id: String): User
© www.soinside.com 2019 - 2024. All rights reserved.