小编Nat*_*han的帖子

Linq to SQL怎么做"where [column] in(values of values)"

我有一个函数,我得到一个id列表,我需要返回一个匹配与id相关的描述的列表.例如:

public class CodeData
{
    string CodeId {get; set;}
    string Description {get; set;}
}

public List<CodeData> GetCodeDescriptionList(List<string> codeIDs)
    //Given the list of institution codes, return a list of CodeData
    //having the given CodeIds
}
Run Code Online (Sandbox Code Playgroud)

因此,如果我自己创建sql,我会简单地执行以下操作(其中in子句包含codeIds参数中的所有值):

Select CodeId, Description FROM CodeTable WHERE CodeId IN ('1a','2b','3')
Run Code Online (Sandbox Code Playgroud)

在Linq to Sql中我似乎无法找到相当于"IN"的子句.到目前为止我发现的最好(不起作用)是:

 var foo = from codeData in channel.AsQueryable<CodeData>()
           where codeData.CodeId == "1" || codeData.CodeId == "2"
           select codeData;
Run Code Online (Sandbox Code Playgroud)

问题是,我无法动态生成linq到sql的"OR"子句列表,因为它们是在编译时设置的.

如何使用Linq to Sql完成检查列的where子句在动态值列表中?

linq linq-to-sql

95
推荐指数
2
解决办法
13万
查看次数

有没有重新编译覆盖.NET Windows服务名称的方法?

我有一个Windows服务可执行文件,我知道是用.NET编写的,我需要在不同的服务名称下安装以避免冲突.无论如何,安装都不提供指定服务名称.如果我只能访问二进制文件,那么当我用installutil安装它时,是否还要覆盖服务名称?

.net windows-services

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

如何调试.NET Windows服务OnStart方法?

我用.NET编写的代码只有在作为Windows服务安装时才会失败.失败不允许服务甚至启动.我无法弄清楚如何进入OnStart方法.

如何:调试Windows服务应用程序提供了一个诱人的线索:

附加到服务的过程允许您调试大多数但不是所有服务的代码; 例如,因为服务已经启动,所以无法以这种方式调试服务的OnStart方法中的代码,或者用于加载服务的Main方法中的代码.解决此问题的一种方法是在服务应用程序中创建临时的第二个服务,该服务仅用于帮助调试.您可以安装这两个服务,然后启动此"虚拟"服务以加载服务进程.一旦临时服务启动了该过程,您就可以使用Visual Studio中的"调试"菜单附加到服务进程.

但是,我不清楚你应该如何创建虚拟服务以加载服务进程.

.net c# debugging

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

流畅的NHibernate:如何创建一对多双向映射?

基本问题:如何在Fluent NHibernate中创建双向一对多地图?

细节:

我有一个有很多孩子的父对象.在我的情况下,孩子没有父母,所以在数据库中,我想外键的母体有NOT NULL约束是没有意义的.我从Fluent NHibernate映射自动生成我的数据库.

我的父母有很多子对象,如下所示:

public class Summary
{
   public int id {get; protected set;}

   public IList<Detail> Details {get; protected set;}
}

public  class Detail
{
   public int id {get; protected set;}

   public string ItemName {get; set;}

  /* public Summary Owner {get; protected set;} */ //I think this might be needed for bidirectional mapping?
}
Run Code Online (Sandbox Code Playgroud)

这是我开始的映射:

public class SummaryMap : ClassMap<Summary>
{
    public SummaryMap()
    {
        Id(x => x.ID);

        HasMany<Detail>(x => x.Details);
    }
}

public class DetailMap : …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping fluent-nhibernate

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

给定一个Member Access lambda表达式,将其转换为具有完全访问路径的特定字符串表示

鉴于

Expression<Func<T, object>> 
Run Code Online (Sandbox Code Playgroud)

(例如x => x.Prop1.SubProp),我想根据需要创建一个字符串"Prop1.SubProp".

在单次访问的情况下(例如x => x.Prop1),我可以轻松地执行以下操作:

MemberExpression body = (expression.Body.NodeType == ExpressionType.Convert) ? (MemberExpression)((UnaryExpression)expression.Body).Operand : (MemberExpression)expression.Body;
return body.Member.Name;
Run Code Online (Sandbox Code Playgroud)

但是,如果存在更深的嵌套,例如x => x.Prop1.SubProp1,则只获得嵌套最深的名称,例如"SubProp1"而不是"Prop1.SubProp1"

反正有没有访问lambda表达式的完整属性路径?

.net c# linq

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

生成的脚本中的SQL Server Check/NoCheck差异

我正在尝试将模式同步到不同的数据库.基本上,我在两个数据库上运行任务 - >使用SQL Server Management Studio生成脚本(2005),并将输出与diff工具进行比较.

出于某种原因,一个脚本添加了约束WITH CHECK和一个WITH NO CHECK,然后重新启用了两个约束.

我得到的第一个数据库:

ALTER TABLE [dbo].[Profile]  WITH CHECK ADD  CONSTRAINT [FK_Profile_OrganizationID] FOREIGN KEY([OrganizationID])
REFERENCES [dbo].[Organization] ([OrganizationID])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_Profile_OrganizationID]
GO
Run Code Online (Sandbox Code Playgroud)

第二个数据库生成为

ALTER TABLE [dbo].[Profile]  WITH NOCHECK ADD  CONSTRAINT [FK_Profile_OrganizationID] FOREIGN KEY([OrganizationID])
REFERENCES [dbo].[Organization] ([OrganizationID])
GO
ALTER TABLE [dbo].[Profile] CHECK CONSTRAINT [FK_Profile_OrganizationID]
GO
Run Code Online (Sandbox Code Playgroud)

所以我有两个问题:

  1. 最终结果是一样的吗?(编辑: 似乎很多人只关注这两个脚本的第一个语句.我对这两个脚本的最终结果感兴趣.)

  2. 如果最终结果相同,为什么Management Studio会针对不同的数据库生成不同的结果?

sql-server sql-server-2005

26
推荐指数
2
解决办法
3万
查看次数

如何在FluentNHibernate中创建复合UNIQUE约束?

我知道我可以Map(x => x.GroupName).WithUniqueConstraint()为一个单一的财产.

但是如何在流畅的nHibernate中创建复合唯一约束(其中唯一约束对两列的组合进行操作)?

nhibernate nhibernate-mapping fluent-nhibernate

25
推荐指数
2
解决办法
9542
查看次数

为什么Nullable <T> HasValue属性不会在Null上抛出NullReferenceException?

请考虑以下代码:

DateTime? ndate = null;
Console.WriteLine(ndate.HasValue);
Run Code Online (Sandbox Code Playgroud)

我原本期望一个NullReferenceException,但HasValue确实会返回false.但是,由于ndate为null,属性调用如何成功,因为没有对象可以调用属性HasValue?

.net c#

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

为什么DbSet Add返回实体实例而不是void?

所述DbSet <TEntity>.新增方法返回的实体.我通常期望一个Add操作有一个void返回类型.

当我查看EntityFramework源代码时,我看到以下实现:

    public virtual TEntity Add(TEntity entity)
    {
        Check.NotNull(entity, "entity");

        GetInternalSetWithCheck("Add").Add(entity);
        return entity;
    }
Run Code Online (Sandbox Code Playgroud)

GetInternalSetWithCheck 返回一个 InternalSet<TEntity>

有趣的Add方法InternalSet<TEntity>在其签名中有一个void返回类型:

public virtual void Add(object entity)
Run Code Online (Sandbox Code Playgroud)

我担心的是,当我对实体进行修改时,是否需要注意它与添加到DbSet的时间有关.

例如,有哪些情况

var entity = new MyEntity();
_dbSet.Add(entity);
entity.SomeDatModifyingMethod();
_dbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

可能会给出不同的行为

var entity = new MyEntity();
entity.SomeDatModifyingMethod();
_dbSet.Add(entity);
_dbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

或不同的行为:

var entity = new MyEntity();
entity = _dbSet.Add(entity);
entity.SomeDatModifyingMethod();
_dbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

在基本的默认实现中,它并不重要,因为它总是返回完全相同的实例.但是,Add方法是virtual,所以它可以被覆盖(虽然在公共源代码中,唯一的覆盖是测试双 - 但我不确定源代码实际上包括例如SqlServer支持实现).

为什么DbSet Add返回实体实例而不是void?

c# entity-framework entity-framework-6

14
推荐指数
2
解决办法
5305
查看次数

从基类的虚方法访问TestContext时,它为null

我有一个基类ScriptBase,它有一个名为的虚函数MyTestInitialize().当我打电话MyTestInitialize()从派生类,则该值testContextInstancenull.这有什么解决方案吗?请帮忙,因为我是自动化测试的新手.提前致谢

[CodedUITest]
public class ScriptsBase
{
    public ScriptsBase()
    {   
    }

    private static TestContext bingTestContext;

    public static TestContext BingTestContext
    {
        get { return ScriptsBase.bingTestContext; }
        set { ScriptsBase.bingTestContext = value;}
    }

    #region TestInitialize
    //Use TestInitialize to run code before running each test 
    [TestInitialize()]
    public virtual void MyTestInitialize()
    {
        Browser.CloseAllBrowsers();
        BingTestContext = testContextInstance;
    }
    #endregion

    #region TestCleanup
    //Use TestCleanup to run code after each test has run
    [TestCleanup()]
    public virtual void MyTestCleanup() …
Run Code Online (Sandbox Code Playgroud)

c# automated-tests mstest ui-testing

10
推荐指数
2
解决办法
7248
查看次数