如何使用Servicestack.Ormlite中两个连接表的值返回一个字典的查询?

时间:2015-03-19 20:41:42

标签: ormlite-servicestack

我有两张桌子,卡片和用户。卡片具有对用户的引用,因此用户可以拥有多张卡片,但一张卡片只能有一个用户。 我做了这个mysql查询,返回Card.Id和User.LastName:

SELECT Card.Id,User.LastName FROM Card
    left join User on Card.UserId = User.Id
    where Card.Id = '1';

如何使用servicestack ormlite进行查询? 我尝试过这样的事情:

var cardIdAndUserName = db.Dictionary<int, string>(db.From<Card>()
    .LeftJoin<Card, User>((c,u) => c.UserId == u.Id)
    .Select(card => new {card.id, user.Lastname}));

我无法使上面的代码生效,因为.Select语句只允许我从Card表中获取列。我想我可以在db.dictionary调用中创建一个db.Select(InfoINeedObject)intead,但是我必须创建一个新类InfoINeedObject。

1 个答案:

答案 0 :(得分:3)

有新的Select Overloads允许您指定多个表added in this commit,现在可以让您这样做:

var cardIdAndUserName = db.Dictionary<int, string>(db.From<Card>()
    .LeftJoin<Card, User>()
    .Select<Card,User>((card,user) => new {card.id, user.Lastname}));
  

注意:联接可以暗示it doesn't need to be specified

此更改可从 v4.0.39 + 获得,现在为available on MyGet