Linq SQL 为所选实体设置 属性 值

Linq SQL set property values to selected entity

我正在使用 Code First Entity Framework 并希望在 Linq 中设置 属性 实体的 select 值。问题是我不想通过手动设置每个 属性 来创建新的实体对象。

我得到了这个 Linq:

var query = from myEntity in entities.MY_ENTITIES
            join joinEntity in entities.JOIN_ENTITIES on myEntity.JOIN_ID equals joinEntity.ID
            select new MY_ENTITY
            {
                ID = myEntity.Id,
                // all other myEntity properties that I want to avoid setting manually
                NotMappedProperty = joinEntity
            };

但我不想创建新的 MY_ENTITY 对象,而是想在 select.
中设置 myEntity 的 NotMappedProperty 此外,我无法映射这两个表,因为我的连接更复杂且无法真正映射。

知道如何减少代码而不是手动编写每个 属性 集吗?如果你有一个有很多属性的实体,这真的会爆炸。


一个解决方案是创建一个包装对象,但这似乎不对:

public class MY_ENTITY_EXTENDED
{
    public MY_ENTITY MyEntity { get; set; }

    public JOIN_ENTITY JoinEntity { get; set; }
}

并且在 Linq select:

// ...
select new MY_ENTITY_EXTENDED
{
    MyEntity = myEntity,
    JoinEntity = joinEntity
}

使用部分 classes 将允许您扩展 MY_ENTITY class.

例如

public partial class MY_ENTITY
{
   // db entity properties
}

public partial class MY_ENTITY
{
    public JOIN_ENTITY JoinEntity { get; set; }
}

丹尼尔, 这样的事情应该有效,在返回原始实体集后填充连接的实体:

var list = new List<MY_ENTITY> ();

var query = from myEntity in entities.MY_ENTITIES 
            select new MY_ENTITY
            {
                ID = myEntity.Id,
                // all other myEntity properties that I want to avoid setting manually
                NotMappedProperty = null,  //    --> we will set this later
                joinEntityIdToJoinTo = joinEntity.ID
            };;

var joinedObjectsQuery = from myEntity in entities.JOIN_ENTITIES;

foreach (var entity in query) 
{
    list.Add( new MY_ENTITY {
        ID = entity.ID,
        NotMappedProperty = joinedObjectsQuery.Single(x=>xID == entity.joinEntityIdToJoinTo)
    })
}