小编Key*_*ner的帖子

意外的Linq行为 - ToList()

理论上我有两个类似的查询返回相同的结果:

var requestNotWorking = SessionManagement.Db.Linq<Item>(false).Where(i => 
                        i.Group != null && i.Group.Id == methodParameter)
                       .ToList();
Run Code Online (Sandbox Code Playgroud)

此请求返回0项,即使它应该返回一项.以下是对后者的重写,但是调用了该ToList()方法.此请求有效并返回第一个查询中预期的项目!

var requestWorking = SessionManagement.Db.Linq<Item>(false).ToList().Where(i => 
                     i.Group != null && i.Group.Id == methodParameter).ToList();
Run Code Online (Sandbox Code Playgroud)

注意:SessionManagement.Db.Linq<Item>(false)是一个通用的Linq到Nhibernate方法,其布尔属性确定请求是否必须在缓存(true)或数据库(false)中执行.这种方法应该没有错,因为它在解决方案的许多其他部分正常工作.Item的映射没什么特别之处:没有包包和以下参数: lazy="false" schema="dbo" mutable="false" polymorphism="explicit"

为什么会这样?

编辑:

生成的requestNoWorking的sql请求以:

(Item.Group_ID is not null) and Item.Group_ID=@p0',N'@p0 int',@p0=11768

生成的requestWorking的sql请求大致是一个 select * from dbo.Items

.net c# linq linq-to-nhibernate

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

从实例外部将属性设置为null

我发现了以下我很难理解的行为.

我假设您可以将对象A的属性设置为对象B,操纵对象B并且更改将被传递到对象A的属性(因为它是同一个对象).我期待这个单元测试通过但是在将B设置为null时它在最后一行失败.为什么?

    [TestMethod]
    public void TestObject()
    {
        Child child = new Child();
        var parent = new Parent(child);
        child.Name = "John";
        Assert.AreEqual(parent.Child.Name, "John");
        child = null;
        Assert.IsNull(parent.Child);
    }

    public class Child
    {
        public string Name { get; set; }   
    }

    public class Parent
    {
        public Child Child { get; set; }

        public Parent(Child kid)
        {
            Child = kid;
        }
    }
Run Code Online (Sandbox Code Playgroud)

.net c#

4
推荐指数
2
解决办法
109
查看次数

字符串 - 克隆、复制和标准影响之间的区别

我在浏览遗留代码时刚刚遇到这样的块:

object exeName = _connectionSettings.ApplicationName.Clone();
RandomFunction(exeName);
Run Code Online (Sandbox Code Playgroud)

起初这对我来说似乎没什么用,但它让我感到好奇。两者之间是否存在根本区别:

var copiedString = initialString;
var copiedString = initialString.Clone();
var copiedString = string.Copy(initialString);
Run Code Online (Sandbox Code Playgroud)

我创建了一个基本的单元测试,似乎表明没有,因为无论使用什么方法,它的行为方式都是相同的(复制字符串的初始影响、初始字符串的更改、复制字符串值的断言)。我错过了什么吗?

.net c#

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

标签 统计

.net ×3

c# ×3

linq ×1

linq-to-nhibernate ×1