小编Den*_*ick的帖子

LINQ .Take()返回的元素多于请求的元素

我们有一个简单的LINQ-to-Entities查询,它应该从特定页面返回特定数量的元素.请求的示例可以是:

var query = from r in records
            orderby r.createdDate descending
            select new MyObject()
            { ... };

//Parameters: pageId = 8, countPerPage = 10
List<MyObject> list = query.Skip(pageId * countPerPage).Take(countPerPage);
Run Code Online (Sandbox Code Playgroud)

上面的示例在大多数情况下都很有效,但有时候列表中有10个以上的元素.这似乎并不总是正确的,取决于数据库数据.例如,当我们请求页面10并将countPerPage作为10时,我们得到10个元素.但是当我们请求页面12并将countPerPage传递为10时,我们得到了11个元素.然后,当我们要求第21页时,我们再次获得10个元素.

这有什么可能的原因吗?

更新:查询,当然,并不像在示例中那么简单,并包含子查询.

这是一个更完整的例子:

var elementsQuery = from m in entityContext.elements
                    where m.elementSearchText.Contains(filter)
                    orderby m.CreatedDate descending
                    select new DataContracts.ElementForWeb()
                    {
                        FirstName = m.FirstName,
                        LastName = m.LastName,
                        Photos = (from p in m.Photos select p.ID),
                        PlacesCount = m.Childs.Where(x => x.Place != null).Count() + ((m.MainChild != null)?1:0),
                        SubElements = (
                            from t …
Run Code Online (Sandbox Code Playgroud)

c# linq entities

18
推荐指数
1
解决办法
2778
查看次数

在检查用户是否是组成员时,如何克服"成员的SID无法解决"错误?

我们有一个过程需要检查特定用户是否是本地Administrators组的成员.

检查的代码如下所示:

using (PrincipalContext context = new PrincipalContext(ContextType.Machine, null))
{
    UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, sUserName);
    if (user != null)
    {
         SecurityIdentifier adminsGroupSID = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
         GroupPrincipal group = GroupPrincipal.FindByIdentity(context, IdentityType.Sid, adminsGroupSID.Value);
         if (group != null)
         {
             if (user.IsMemberOf(group))
                 return 0;
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

当该组具有已删除的帐户(例如域帐户)时,我们将获得PrincipalOperationException和消息"枚举组成员身份时发生错误(1332).该成员的SID无法解析."

有没有办法克服这个问题没有:a)从组中手动删除孤立的SID b)不忽略它?

谢谢

c# active-directory

7
推荐指数
2
解决办法
9564
查看次数

WinForms - 错误的表单大小

我们有以下代码:

    private void MainForm_Shown(object sender, EventArgs e)
    {
        RepositionForm();
    }

    private void RepositionForm()
    {
        Rectangle rect = Screen.PrimaryScreen.WorkingArea;
        this.Width = 100;
        this.Height = 117;
        this.TopMost = true;
        this.Left = rect.Width - this.Width - 1;
        this.Top = rect.Height - this.Height - 1;
    }
Run Code Online (Sandbox Code Playgroud)

当我们从Visual Studio启动应用程序时 - 表单显示正确的大小:100x117.但是,当我们通过启动EXE文件启动项目时,表单大小为106x127.

The MinimumSize, MaximumSize and Size properties are set to 100x117.
WindowsState = Minimized
ShowIcon = False
ShowInTaskbar = False
Topmost = True
MinimizeBox - False
MaximizeBox = False
FormBorderSize = FixedDialog
ControlBox = True …
Run Code Online (Sandbox Code Playgroud)

c# winforms

6
推荐指数
1
解决办法
3323
查看次数

以"命令样式"格式导出OrientDB数据库结构

问题是 - 有没有办法以命令样式格式导出OrientDB数据库结构,如:

create database <name>
create class <name>
create property <name>...
Run Code Online (Sandbox Code Playgroud)

等等

谢谢,丹尼斯

orientdb

6
推荐指数
1
解决办法
1192
查看次数

不能使用'(未知)'; 文件已在使用中

我们遇到了这个问题,我认为这个问题应该很容易解决,但不确定如何解决.我们有Windows 2003 Server和Classic ASP应用程序.MSAccess数据库用于数据存储.

该应用程序的设计方式包含很多.

.asp页面可能会打开数据库连接并在页面末尾将其关闭.同时,页面上包含的包含也可以打开相同的数据库.

问题是在第二次打开时我们收到错误:

Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver] Could not use '(unknown)'; file already in use
Run Code Online (Sandbox Code Playgroud)

这仅限于我们的本地配置 - 我们不拥有该项目,但正在帮助客户修复某些项目.在客户方面,一切都很完美.当我们设置对数据库的只读访问时,不会显示此错误.因此,似乎ADODB.Connection以独占模式打开数据库.

任何人都有任何想法如何解决这个问题?

谢谢

ms-access asp-classic

5
推荐指数
1
解决办法
1万
查看次数

MSI安装和UAC

我们使用WiX构建了产品安装.它需要在服务器上执行,并且由于其性质,需要创建用户并分配此用户特定权限(例如,作为服务执行)为此我们使用我们自己的自定义操作,这些操作在基于C#的自定义操作库中定义.

当我们由具有管理权限但在Windows 2008上不是管理员的用户开始安装时,系统不会要求我们确认是否要执行此应用程序(不显示UAC对话框).因此,所有这些操作都会失败,因为MSI似乎在没有管理权限的情况下运行.我们无法延迟操作,因为其中一些操作需要在UI序列中执行,需要标记为"立即".

我们如何将安装程序标记为需要管理权限的安装程序?我们尝试了WiX属性InstallPrivileges ='elevated',但是文档说它是默认设置的,并没有任何区别.

谢谢

installer windows-installer wix

3
推荐指数
1
解决办法
5333
查看次数