TransactionTypes
と呼ばれる、という名前のプロパティを持つエンティティAccountAction
があります。TransactionType
エンティティです。ODataに相当するLINQのSelectMany
というメソッドですべてのAccountActions
に関連するすべてのTransactionTypes
のリストを返します。 TransactionTypes
の返されたリストにクエリオプションを適用したいと思います。しかし、これまでのところ、すべてのクエリオプションがAccountActions
に適用されているため、私は壁にぶつかりました。
TransactionTypes
の返されたリストのURLにクエリオプションを適用する方法はありますか?言い換えれば、SelectMany
のURLから、TransactionTypes
に関連するAccountActions
を取得して、見つけたTransactionTypes
にクエリオプションを適用する方法がありますか?
以下は、私が使用しているコードの抜粋です。以下の図に見られるように
[Route(FullControllerPath + "/TransactionTypes")]
public IHttpActionResult GetTransactionTypes(ODataQueryOptions<AccountAction> queryOptions, bool addCols, int? skip, int? take)
{
using (AccountActionManagement _accountActionManage = new AccountActionManagement(this.GenerateInformation()))
{
_accountActionManage.SetTraslationList("DATASTRUCT-CONFIG-ACCOUNTACTIONTRANSACTIONTYPE", language);
// Query composition
IQueryable<TransactionType> query = queryOptions.ApplyTo(_accountActionManage.GetTypeAsQueryable<AccountAction>())
.OfType<AccountAction>()
.SelectMany(aa => aa.TransactionTypes)
.Include(tt => tt.AccountActionForDefaultTransactionType.DefaultTransactionType);
var queryData = query.Select(tt => new
{
Id = tt.Id,
Name = tt.Name,
Operation = tt.Operation,
Type = tt.Type,
Default = tt.AccountActionForDefaultTransactionType != null &&
tt.AccountActionForDefaultTransactionType.DefaultTransactionType.Id == tt.Id,
Version = tt.AccountActionForDefaultTransactionType.Version
});
// Get count
int totalRows = queryData.Count();
// Get biggest version in query
var maxVersion = queryData.Max(i => i.Version);
// Get data from database
var queryResult = queryOptions.OrderBy == null
? queryData.OrderBy(i => i.Id)
.Skip(skip ?? 0)
.Take(take ?? totalRows)
.ToList()
: queryData.Skip(skip ?? 0)
.Take(take ?? totalRows)
.ToList();
...}}
、AccountActionはTransactionType
に多対多の関係を有しています。 AccountAction
には最初の役割があり、TransactionType
には2番目の役割があります。
ダイアグラムでは、AccountActionとTransactionTypesの関係が多対多ではなく、一対多であることが示されています。どちらが正しい? – Cameron
AccountActionとTransactionTypesは単なるタグに過ぎません。 AccountActionが単数で、TransactionTypesが複数であるという事実は、関係の性質を示すものではありません。むしろ、アスタリスクは関係の多重度を示す。 –
私は彼らが誤解を招くのを見て、エンティティの横にあるタグを画像から削除しました。 –