将linq查询属性的第一组作为可选字符串返回的最简单方法是什么?

问题描述 投票:0回答:1

最简单的方法是将第一组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;
}
c# linq linq-to-entities
1个回答
1
投票

匿名类型与元组不同。

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();
}
© www.soinside.com 2019 - 2024. All rights reserved.