首页 > 解决方案 > Linq SQL 将属性值设置为选定的实体

问题描述

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

我得到了这个 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对象,我只想myEntity在选择中设置 NotMappedProperty 。
此外,我无法映射这两个表,因为我的联接更复杂,而且不是真正可映射的。

关于如何减少代码而不是手动编写每个属性集的任何想法?如果你有一个具有许多属性的实体,这真的会爆炸。


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

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

    public JOIN_ENTITY JoinEntity { get; set; }
}

在 Linq 中选择:

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

标签: c#entity-frameworklinqlinq-to-entities

解决方案


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

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)
    })
}

推荐阅读