返回 LINQ 查询结果时方法的输出类型是什么

本文关键字:输出 类型 是什么 方法 LINQ 查询 结果 返回 | 更新日期: 2023-09-27 18:37:06

我使用Linq查询而不是使用Sqlserver的视图。我想把它放在方法中,我的输出类型是什么?感谢您的帮助

public ???? InsuranceWorkerView()
{
    var InsuranceWorkers =(from ins_insuranceworkers in db.INS_InsuranceWorkers
         join dv in db.DivisionCountry on new { InsWorkerCityID = ins_insuranceworkers.InsWorkerCityID } equals new { InsWorkerCityID = dv.DivisionID } into divisioncountry_1_join
         from dv in divisioncountry_1_join.DefaultIfEmpty()
         join divisioncountry in db.DivisionCountry on new { InsWorkerStateID = ins_insuranceworkers.InsWorkerStateID } equals new { InsWorkerStateID = divisioncountry.DivisionID } into divisioncountry_join
         from divisioncountry in divisioncountry_join.DefaultIfEmpty()
         select new 
         {
            ins_insuranceworkers.InsWorkerID,
            ins_insuranceworkers.InsWorkerCreateUserID,
             ins_insuranceworkers.InsWorkerTypeID,
             ins_insuranceworkers.InsWorkerFirstName,
             ins_insuranceworkers.InsWorkerLastName,  
            ins_insuranceworkers.InsWorkerNationalCode,
             ins_insuranceworkers.InsWorkerMobileNum,
             ins_insuranceworkers.InsWorkerAddress,
             ins_insuranceworkers.InsWorkerEmail,
              City = dv.DivisionName,
              State = divisioncountry.DivisionName,
             InsWorkerStateID =(Int32?)ins_insuranceworkers.InsWorkerStateID,
             InsWorkerCityID = (Int32?)ins_insuranceworkers.InsWorkerCityID
         }).ToList();
    return InsuranceWorkers;
}

返回 LINQ 查询结果时方法的输出类型是什么

不幸的是,

您无法从方法返回匿名类型:

不能声明字段、属性、事件或返回类型 的方法具有匿名类型。同样,您不能声明 方法、属性、构造函数或索引器的形式参数为 具有匿名类型。传递匿名类型或集合 包含匿名类型,作为方法的参数,您可以 将参数声明为类型对象。

因此,请为此数据创建一些特定类型并返回它:

public List<Foo> InsuranceWorkerView()
{
    return (from i in db.INS_InsuranceWorkers
            select new Foo {
                InsWorkerID = i.InsWorkerID,
                InsWorkerCreateUserID = i.InsWorkerCreateUserID
                // etc
            }).ToList();
}

或者返回object(我觉得有点没用):

public object InsuranceWorkerView()
{
    return (from i in db.INS_InsuranceWorkers
            select new {
                i.InsWorkerID,
                i.InsWorkerCreateUserID
                // etc
            }).ToList();
}

您可以将新列表作为 IList 返回。

public IList InsuranceWorkerView()
{
    var InsuranceWorkers =(from ins_insuranceworkers in db.INS_InsuranceWorkers
         join dv in db.DivisionCountry on new { InsWorkerCityID = ins_insuranceworkers.InsWorkerCityID } equals new { InsWorkerCityID = dv.DivisionID } into divisioncountry_1_join
         from dv in divisioncountry_1_join.DefaultIfEmpty()
         join divisioncountry in db.DivisionCountry on new { InsWorkerStateID = ins_insuranceworkers.InsWorkerStateID } equals new { InsWorkerStateID = divisioncountry.DivisionID } into divisioncountry_join
         from divisioncountry in divisioncountry_join.DefaultIfEmpty()
         select new 
         {
            ins_insuranceworkers.InsWorkerID,
            ins_insuranceworkers.InsWorkerCreateUserID,
             ins_insuranceworkers.InsWorkerTypeID,
             ins_insuranceworkers.InsWorkerFirstName,
             ins_insuranceworkers.InsWorkerLastName,  
            ins_insuranceworkers.InsWorkerNationalCode,
             ins_insuranceworkers.InsWorkerMobileNum,
             ins_insuranceworkers.InsWorkerAddress,
             ins_insuranceworkers.InsWorkerEmail,
              City = dv.DivisionName,
              State = divisioncountry.DivisionName,
             InsWorkerStateID =(Int32?)ins_insuranceworkers.InsWorkerStateID,
             InsWorkerCityID = (Int32?)ins_insuranceworkers.InsWorkerCityID
         }).ToList();

并访问该项目

   foreach(var item in InsuranceWorkers)
   {
      var a=   item.InsWorkerID; // to access the anonymous items
   }
}

当动态可能会派上用场时,就是这种情况。

public IEnumerable<dynamic> InsuranceWorkerView()
{
    var InsuranceWorkers =(from ins_insuranceworkers in db.INS_InsuranceWorkers
         join dv in db.DivisionCountry on new { InsWorkerCityID = ins_insuranceworkers.InsWorkerCityID } equals new { InsWorkerCityID = dv.DivisionID } into divisioncountry_1_join
         from dv in divisioncountry_1_join.DefaultIfEmpty()
         join divisioncountry in db.DivisionCountry on new { InsWorkerStateID = ins_insuranceworkers.InsWorkerStateID } equals new { InsWorkerStateID = divisioncountry.DivisionID } into divisioncountry_join
         from divisioncountry in divisioncountry_join.DefaultIfEmpty()
         select new 
         {
            ins_insuranceworkers.InsWorkerID,
            ins_insuranceworkers.InsWorkerCreateUserID,
             ins_insuranceworkers.InsWorkerTypeID,
             ins_insuranceworkers.InsWorkerFirstName,
             ins_insuranceworkers.InsWorkerLastName,  
            ins_insuranceworkers.InsWorkerNationalCode,
             ins_insuranceworkers.InsWorkerMobileNum,
             ins_insuranceworkers.InsWorkerAddress,
             ins_insuranceworkers.InsWorkerEmail,
              City = dv.DivisionName,
              State = divisioncountry.DivisionName,
             InsWorkerStateID =(Int32?)ins_insuranceworkers.InsWorkerStateID,
             InsWorkerCityID = (Int32?)ins_insuranceworkers.InsWorkerCityID
         }).ToList();
    return InsuranceWorkers;
}

然后你可以使用类似的东西:

foreach (var worker in InsuranceWorkerView()) {
   var id = (int)worker.InsWorkerID;
}

为了简化事情,我建议您创建一种具有所需属性的 POCO 类,以便正确表示所需的投影,而不是将其选择为匿名类型并参与烦人的危险铸件。

将 POCO 类创建为:

public class InsuranceWorker
{
  public int InsWorkerId {get;set;}
  public int InsWorkerCreateUserId {get;set;}
  //Keep add the necessary properties here...
}

用法:

将您的匿名选择 ( select new ) 语句替换为我们刚刚在上面创建的已知类型:

 select new InsuranceWorker
 {
    InsWorkerId = ins_insuranceworkers.InsWorkerID,
    InsWorkerCreateUserId = ins_insuranceworkers.InsWorkerCreateUserID,
    //....
 }).ToList();

并返回IList<InsuranceWorker>

public IList<InsuranceWorker> InsuranceWorkerView()
{
  ....
}