混凝土型投影内的"新"只被调用一次

art*_*olk 12 c# linq linq-to-sql

我简单的Linq2Sql查询:

var result = from t in MyContext.MyItems
             select new MyViewModelClass()
             {
                 FirstProperty = t,
                 SecondProperty = new SomeLinq2SqlEntity()
             }      
Run Code Online (Sandbox Code Playgroud)

问题是它似乎new SomeLinq2SqlEntity()只对序列执行一次,因此MyViewModelClass查询结果的所有实例共享一个对象的链接.

更新:以下是我如何快速检查它:

result[0].SecondProperty.MyField = 10;
Run Code Online (Sandbox Code Playgroud)

使用调试器我可以检查在所有实例中都MyField设置了10.

当我用foreach替换LINQ查询时,它按预期工作:

  var result = from t in MyContext.MyItems select t;
  var list = new List<MyViewModelClass>();
  foreach (var item in result)
  {
      list.add(new MyViewModelClass()
             {
                 FirstProperty = item,
                 SecondProperty = new SomeLinq2SqlEntity()
             });       
  }
Run Code Online (Sandbox Code Playgroud)

我没有找到问题的根源,但标记为asnwer的帖子提供了良好的解决方法.请查看此asnwer以获取详细说明:具体类型投影中的"new"仅调用一次

Adu*_*cci 2

您是否尝试过使用SomeLinq2SqlEntitylinq to objects 添加对象?

var result = (from t in MyContext.MyItems
             select new
             {
                 FirstProperty = t
             })
             .AsEnumerable() 
             .Select(t => new MyViewModelClass()
             {
                 FirstProperty = t.FirstProperty ,
                 SecondProperty = new SomeLinq2SqlEntity();
             });   
Run Code Online (Sandbox Code Playgroud)