gpt4 book ai didi

scala - 如何使用 inSetBind 过滤 Slick 中的多列?

转载 作者:行者123 更新时间:2023-12-01 12:39:11 24 4
gpt4 key购买 nike

我有下表定义(简化):

class Houses(tag: Tag) extends Table[HouseRow](tag, "HOUSE") {
def houseId = column[Long]("HOUSE_ID", O.NotNull, O.PrimaryKey, O.AutoInc)
def houseName = column[String]("HOUSE_NAME", O.NotNull)
def houseType = column[String]("HOUSE_TYPE", O.NotNull)

def uniqueHouseName = index("UQ_HOUSE_NAME_HOUSE_TYPE", (houseName, houseType), true)

def * = (houseId, houseName, houseType) <> (HouseRow.tupled, HouseRow.unapply)
}

val houses = TableQuery[Houses]

我想选择与一组 uniqueHouseName 索引匹配的房屋,如下所示。
case class HouseKey(houseName: String, houseType: String)
val houseKeys: Seq(HouseKey("name1", "type1"), HouseKey("name2", "type2"))

一个天真 inSetBind过滤器将匹配例如。 HouseRow(ID, "name1", "type2")这是不正确的。
在 MySql 中,我会做类似的事情:
SELECT * FROM HOUSE h
WHERE(h.HOUSE_TYPE, d.HOUSE_NAME) IN
(
SELECT 'type1' as HOUSE_TYPE, 'name1' as HOUSE_NAME
UNION
SELECT 'type2', 'name2'
);

最佳答案

像@cvogt 版本,但不会在空列表中爆炸:

val filteredHouses = 
houses.filter(h =>
houseKeys.map(hk => h.houseName === hk.houseName &&
h.houseType === hk.houseType)
.reduceOption(_ || _).getOrElse(false: Rep[Boolean])
)

在 slick 3.1.0 中测试

关于scala - 如何使用 inSetBind 过滤 Slick 中的多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26683476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com