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

时间:2013-10-26 12:43:37

标签: c# linq methods output

我使用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;
}

4 个答案:

答案 0 :(得分:1)

很遗憾,您无法从方法中返回anonymous types

  

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

因此,要么为此数据创建一些特定类型并将其返回:

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();
}

答案 1 :(得分:0)

动态可能派上用场就是这种情况。

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;
}

答案 2 :(得分:0)

您可以将新列表作为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
   }
}

答案 3 :(得分:0)

为简化起见,我建议你创建一种具有所需属性的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()
{
  ....
}