0

下面是来自 DotNetNuke 示例模块的代码,该模块从数据库中获取属于特定模块的项目集合。我想要的是为其过滤添加第二个参数。我猜这与修改范围 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;
        }

这是一种方法,您也可以在控制器中使用 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 回答