0

以下は、特定のモジュールに属するアイテムのコレクションをデータベースから取得する DotNetNuke サンプル モジュールのコードです。私が欲しいのは、それをフィルタリングするための2番目のパラメーターを追加することです。これは、スコープ item.cs クラスの変更と関係があると思いますが、正確にはわかりません。

    public IEnumerable<Item> GetItems(int moduleId)
    {
        IEnumerable<Item> t;
        using (IDataContext ctx = DataContext.Instance())
        {
            var rep = ctx.GetRepository<Item>();
            t = rep.Get(moduleId);
        }
        return t;
    }

何か案は?

4

2 に答える 2

1

DAL2 でこれを行う別の方法は、.Find() メソッドを使用することです。これは、テーブル内のインデックス付きフィールドに対してクエリを実行したいが、スコープのキャッシュを気にしない場合に適しています。

public IEnumerable<Item> GetItemByName(int moduleId, string itemname)
{
    IEnumerable<Item> t;
    using (IDataContext ctx = DataContext.Instance())
    {
        var rep = ctx.GetRepository<Item>();
        t = rep.Find("WHERE ModuleId = @0 AND ItemName LIKE @1", moduleId, itemname);
    }
    return t;
}
于 2013-09-04T16:17:07.203 に答える
0

DAL2を使用するSignalRChatモジュールのサンプルコードを次に示します(http://signalrchat.codeplex.com/SourceControl/changeset/view/71473#1272188

public IEnumerable<Message> GetRecentMessages(int moduleId, int hoursBackInTime, int maxRecords)
        {
            var messages = (from a in this.GetMessages(moduleId) where a.MessageDate.Subtract(DateTime.UtcNow).TotalHours <= hoursBackInTime select a).Take(maxRecords).Reverse();

            return messages.Any() ? messages : null;
        }

これは1つのアプローチであり、コントローラー内でもSQLステートメントを使用できます(http://signalrchat.codeplex.com/SourceControl/changeset/view/71473#1272186

public ConnectionRecord GetConnectionRecordByConnectionId(string connectionId)
        {
            ConnectionRecord t;
            using (IDataContext ctx = DataContext.Instance())
            {
                var connections = ctx.ExecuteQuery<ConnectionRecord>(CommandType.Text,
                                                       string.Format(
                                                           "select top 1 * from {0}{1}SignalRChat_ConnectionRecords where ConnectionId = '{2}'",
                                                           _databaseOwner,
                                                           _objectQualifier,
                                                          connectionId)).ToList();

                if (connections.Any())
                {
                    t = connections[0];
                }
                else
                    return null;
            }
            return t;
        }
于 2013-03-19T06:01:10.883 に答える