小编dan*_*dan的帖子

LINQ to SQL - 具有多个连接条件的左外连接

我有以下SQL,我试图将其转换为LINQ:

SELECT f.value
FROM period as p 
LEFT OUTER JOIN facts AS f ON p.id = f.periodid AND f.otherid = 17
WHERE p.companyid = 100
Run Code Online (Sandbox Code Playgroud)

我已经看到了左外连接的典型实现(即into x from y in x.DefaultIfEmpty()等),但我不确定如何引入其他连接条件(AND f.otherid = 17)

编辑

为什么AND f.otherid = 17条件是JOIN的一部分而不是WHERE子句?因为f某些行可能不存在,我仍然希望包含这些行.如果条件在WHERE子句中应用,在JOIN之后 - 那么我没有得到我想要的行为.

不幸的是:

from p in context.Periods
join f in context.Facts on p.id equals f.periodid into fg
from fgi in fg.DefaultIfEmpty()
where p.companyid == 100 && fgi.otherid == 17
select f.value
Run Code Online (Sandbox Code Playgroud)

似乎等同于:

SELECT …
Run Code Online (Sandbox Code Playgroud)

c# sql linq outer-join linq-to-sql

144
推荐指数
4
解决办法
14万
查看次数

如何在WPF中实现虚线或虚线边框?

我有一个ListViewItem我正在申请一个Style,我想把一个虚线灰色线作为底部Border.

我怎么能在WPF中这样做?我只能看到纯色画笔.

wpf styles border listviewitem

68
推荐指数
4
解决办法
6万
查看次数

将EPPlus与MemoryStream一起使用

我正在使用EPPlus在C#中生成XLSX文件.一旦我用内存流实例化ExcelPackage - 我收到错误:

"写操作期间发生磁盘错误.(HRESULT异常:0x8003001D(STG_E_WRITEFAULT))"

代码是:

MemoryStream stream = new MemoryStream();

using (ExcelPackage package = new ExcelPackage(stream))
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

有没有人见过这个?

c# excel epplus

44
推荐指数
4
解决办法
7万
查看次数

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

POCO,DTO,DLL和贫血领域模型

我正在研究POCO和DTO之间差异(似乎POCO与行为有关(方法?))并且Martin Fowler在贫血领域模型上发现了这篇文章.

由于缺乏理解,我认为我已经创建了这些贫血领域模型之一.

在我的一个应用程序中,我将业务域实体定义为'dto'dll.他们有很多属性,包括getter和setter,而不是其他.我的业务逻辑代码(填充,计算)位于另一个"bll"dll中,我的数据访问代码位于"dal"dll中.我认为'最佳实践'.

所以通常我会像这样创建一个dto:

dto.BusinessObject bo = new dto.BusinessObject(...)
Run Code Online (Sandbox Code Playgroud)

并将其传递给bll层,如下所示:

bll.BusinessObject.Populate(bo);
Run Code Online (Sandbox Code Playgroud)

反过来,它执行一些逻辑并将其传递给dal层,如下所示:

dal.BusinessObject.Populate(bo);
Run Code Online (Sandbox Code Playgroud)

根据我的理解,为了使我的dto成为POCO,我需要将业务逻辑和行为(方法)作为对象的一部分.所以代替上面的代码更像是:

poco.BusinessObject bo = new poco.BusinessObject(...)
bo.Populate();
Run Code Online (Sandbox Code Playgroud)

即.我在对象上调用方法而不是将对象传递给方法.

我的问题是 - 我怎么能这样做,仍然保留关注点的'最佳实践'层次(单独的dll等...).不调用对象上的方法意味着必须在对象中定义方法?

请帮助我的困惑.

dll data-access-layer poco dto bll

20
推荐指数
3
解决办法
5106
查看次数

如何将ac#二维数组转换为JSON对象?

如果我在C#中有一个二维数组 - 我怎样才能将它转换为包含二维数组的JSON字符串?

例如.

int[,] numbers = new int[8,4];
JavaScriptSerializer js = new JavaScriptSerializer();
string json = js.Serialize(numbers);
Run Code Online (Sandbox Code Playgroud)

在JSON对象中给出一个平面的一维数组.Microsoft文档说明:

'多维数组被序列化为一维数组,你应该将它用作平面数组.

javascript c# json

13
推荐指数
1
解决办法
7323
查看次数

从关系OLTP数据库到OLAP多维数据集的最佳方法是什么?

我有一个相当标准的OLTP规范化数据库,我已经意识到我需要做一些复杂的查询,平均值,数据中不同维度的标准偏差.

所以我转向SSAS并创建了OLAP多维数据集.

然而,为了创建立方体,我相信我的数据源结构需要采用"星形"或"雪花"配置(我认为现在不是这样).

通常的过程是使用SSIS在我的主OLTP DB上进行某种ETL过程,进入另一个具有事实和维度的正确"星形"配置的关系数据库,然后使用此DB作为OLAP多维数据集的数据源?

谢谢

database olap ssas ssis

12
推荐指数
2
解决办法
5938
查看次数

为什么我的.wpp.targets文件没有应用到我的构建服务器上?

我有一个自定义.wpp.targets文件,它设置了一些ACL.当我在visual studio中构建时,生成的源清单文件包含自定义ACL.

当我从构建服务器运行时,它只是不起作用.生成的文件不包含.wpp.targets文件中的acl.

构建服务器安装了.net框架4,Web部署,它具有正确的Microsoft.Web.Publishing.targets文件.我在服务器上的构建中包含了一些诊断,其中似乎"AfterAddIisSettingAndFileContentsToSourceManifest"属性为false.我不熟悉msbuild.有人可以帮忙吗?

编辑:

我注意到在我的Microsoft.Web.Publishing.targets中有以下几行:

  <PropertyGroup>
    <WebPublishPipelineCustomizeTargetFile Condition="'$(WebPublishPipelineCustomizeTargetFile)'==''">$(WebPublishPipelineProjectDirectory)\$(WebPublishPipelineProjectName).wpp.targets</WebPublishPipelineCustomizeTargetFile>
  </PropertyGroup>

  <Import Project="$(WebPublishPipelineCustomizeTargetFile)" Condition="Exists($(WebPublishPipelineCustomizeTargetFile))"/>
Run Code Online (Sandbox Code Playgroud)

但是,msbuild的输出中没有关于webpublishpipeline的内容.我认为我的.wpp.targets文件甚至没有被查看!

目标文件:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"  ToolsVersion="4.0">
    <!--
    ********************************************************************
     Task Custom ACLs 
    ********************************************************************
    -->
    <PropertyGroup>
         <!-- Extends the AfterAddIisSettingAndFileContentsToSourceManifest action to also set ACLs-->
           <AfterAddIisSettingAndFileContentsToSourceManifest Condition="'$(AfterAddIisSettingAndFileContentsToSourceManifest)'==''">
                $(AfterAddIisSettingAndFileContentsToSourceManifest);
                SetCustomACLs;
            </AfterAddIisSettingAndFileContentsToSourceManifest>
        </PropertyGroup>

        <Target Name="SetCustomACLs">
            <Message Text="Adding Custom ACls" />
            <ItemGroup>
                <!--Make sure the by default Networkservice/AppPoolIdentity have write permission to the root-->
                <MsDeploySourceManifest Include="setAcl" >
                    <Path>$(_MSDeployDirPath_FullPath)\bin\ABCpdf8-64.dll</Path>
                    <setAclAccess>ReadAndExecute</setAclAccess>
                    <setAclResourceType>File</setAclResourceType>
                    <AdditionalProviderSettings>setAclResourceType;setAclAccess</AdditionalProviderSettings>
                </MsDeploySourceManifest>
            </ItemGroup>
        </Target>
    </Project>
Run Code Online (Sandbox Code Playgroud)

msbuild输出:

[GenerateMsdeployManifestFiles] CallTarget
    [22:13:44]: [CallTarget] Target "PipelinePreDeployCopyAllFilesToOneFolder" skipped. …
Run Code Online (Sandbox Code Playgroud)

msbuild build microsoft-web-deploy

11
推荐指数
1
解决办法
7047
查看次数

如何正确返回接口列表类型?

使用以下代码,我在"返回书籍"上收到"无法隐式转换"编译错误.线.

我认为,因为我返回一个实现IPublication的书籍对象列表,这应该工作正常吗?

public interface IPublication {}

public class Book : IPublication {}

public List<IPublication> GetBooks()
{
    List<Book> books = new List<Book>();
    return books;
}
Run Code Online (Sandbox Code Playgroud)

我注意到,如果我将一本书作为单个IPublication对象返回,它可以正常工作.介绍List<>需要显式转换.

作为我正在使用的解决方法:

return books.Cast<IPublication>().ToList();
Run Code Online (Sandbox Code Playgroud)

c# interface list

8
推荐指数
1
解决办法
6505
查看次数

如何使用WPF单击一次应用程序部署非托管DLL?

我有一个WPF点击一次应用程序,它使用一个非托管的DLL.

在本地调试时,我刚刚将dll复制到debug/bin文件夹中.

如何在项目中包含dll(VS2010),以便部署并可以访问应用程序?

我已经尝试将其添加为资源并设置"内容"和"始终复制",并且该文件似乎确实存在于设置/部署文件中,但是应用程序无法看到它.

如果它有帮助,这是我用来访问非托管DLL中的方法的代码示例.

 [DllImport("ODBC_VER_DETECT.dll")]
 extern private static long GetCompanyFileVersion([MarshalAs(UnmanagedType.LPStr)] String sDataBase,
                                                 [MarshalAs(UnmanagedType.LPStr)] StringBuilder sVersion);
Run Code Online (Sandbox Code Playgroud)

wpf clickonce

7
推荐指数
1
解决办法
3736
查看次数