【发布时间】:2017-09-10 00:52:50
【问题描述】:
新版本的 C# 已经出现,具有有用的新功能 Tuple Types:
public IQueryable<T> Query<T>();
public (int id, string name) GetSomeInfo() {
var obj = Query<SomeType>()
.Select(o => new {
id = o.Id,
name = o.Name,
})
.First();
return (id: obj.id, name: obj.name);
}
有没有办法将我的匿名类型对象 obj 转换为我想要返回的元组,而无需逐个属性映射(假设属性名称匹配)?
上下文在 ORM 中,我的 SomeType 对象有很多其他属性,它被映射到一个有很多列的表。我想做一个只带 ID 和 NAME 的查询,所以我需要将匿名类型转换为元组,或者我需要 ORM Linq 提供者知道如何理解元组并将属性相关列放在 SQL 选择子句中。
【问题讨论】:
-
我认为你可以做
return (obj.id, obj.name);,因为你在函数签名中有名字,但我现在没有 C# 7 来测试它。 -
等等,你确定你的匿名类是
new { id => o.Id, name => o.Name }而不是new { id = o.Id, name = o.Name }
标签: linq-to-entities tuples anonymous-types linq-to-nhibernate c#-7.0