0

ユーザー テーブルとメッセージ テーブルがあります。Messages テーブルには、Users テーブルへの 2 つの外部キー参照 "To_Id" と "From_Id" があり、どちらも User.Id を指しています。メッセージを返すクエリを作成し、To と From の関係で表される User の両方から Username プロパティを取得できるようにしたいと考えています。これが私がこれまでに持っているものです:

dynamic sender;
dynamic recipient;
var messages= db.Messages.All(db.Messages.To_Id == currentUser.Id || db.Messages.From_Id == currentUser.Id)
    .Join(db.Users.As("Sender"), out sender).On(sender.Id == db.Messages.From_Id)
    .Join(db.Users.As("Recipient"), out recipient).On(recipient.Id == db.Messages.To_Id)
return messages;

このクエリの結果は、正しいメッセージ数を示していますが、To_Id 列と From_Id 列が消え、Sender 列と Recipient 列の名前も表示されません。ドキュメント、github のソース、およびこの質問を見てみました: Simple.Data - how to bi-drectionally join on the same table times without no success yet. 何か案は?

4

1 に答える 1

2

To_Id 列と From_Id 列に何が起こっているのかわかりませんが、Users 行を熱心に読み込みたい場合は、With 句を追加する必要があります。

dynamic sender;
dynamic recipient;
var messages= db.Messages.All(db.Messages.To_Id == currentUser.Id || db.Messages.From_Id == currentUser.Id)
    .Join(db.Users.As("Sender"), out sender).On(sender.Id == db.Messages.From_Id)
    .Join(db.Users.As("Recipient"), out recipient).On(recipient.Id == db.Messages.To_Id)
    .With(sender)
    .With(recipient);
return messages;

欠落している列については、クエリに対して実行されている SQL を確認するためにトレースを調べてみましたか? それはいくつかの光を当てるのに役立つかもしれません.

于 2013-02-12T00:15:17.953 に答える