c# - 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
}
解决方案
丹尼尔,这样的事情应该可以工作,在返回原始实体集后填充连接的实体:
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)
})
}
推荐阅读
- neo4j - Neo4j - 许多在同一个密码查询中按属性值计算节点
- r - 模糊比较和聚合单列数据框中的相似记录
- qt - QMap 没有命名类型
- java - 读取凌乱的 CSV 文件
- reactjs - 在 React 和 JSX 中访问材质 UI 下拉值
- python - AttributeError:“NoneType”对象没有属性“_jvm - PySpark UDF
- postgresql - postgresql RAISE 消息是否存储在某处?
- javascript - vue.js 阻止一个数据元素触发更新
- c++ - 在 ARM 裸机引导加载程序上启用 C++ 异常
- javascript - React:在一种状态下保存多个相似的输入字段