最简单的方法是将第一组linq查询属性作为可选字符串或隐式从匿名类型返回到(string ?, string?)?由于匿名对象,以下内容无法使用。
private (string? HotemName, string? TransportationName) Get3rdPartyHotelTranporationNames(int customerID, int supplierID, System.DateTime? startDate, System.DateTime? endDate)
{
var x = (from res in reservations
join trans in _unitOfWork.tbl_reservations on res.id_pk equals transRes.id
where trans.status == 4
select new
{
HotemName = res.Name,
TransportationName = trans.Name
}).Take(1).Single();
return x;
}
匿名类型与元组不同。
Anonymous types提供了一种方便的方法来封装一组将只读属性放入单个对象,而无需显式首先定义一个类型。类型名称由编译器生成,并且是在源代码级别不可用。每个属性的类型是由编译器推断。
C# tuples是您使用轻量级语法定义的类型。优点包括语法更简单,基于转换的规则关于元素的数量(称为基数)和类型,以及复制,相等性测试和作业的一致规则。作为一个权衡,元组不支持某些面向对象的习惯用法与继承相关联。
而且,您不能从函数返回匿名类型。在您的情况下,您应该像下面的代码一样从LINQ返回新的元组:
private (string? HotemName, string? TransportationName) Get3rdPartyHotelTranporationNames(int customerID, int supplierID, System.DateTime? startDate, System.DateTime? endDate)
{
return (from res in reservations
join trans in _unitOfWork.tbl_reservations on res.id_pk equals transRes.id
where trans.status == 4
select (res.Name, trans.Name)
).Take(1).Single();
}