1

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

4 回答 4

1

不幸的是,您不能从方法返回匿名类型:

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

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

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();
}
于 2013-10-26T12:46:06.557 回答
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;
}
于 2013-10-26T13:36:05.080 回答
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
   }
}
于 2013-10-26T13:44:43.757 回答
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()
{
  ....
}
于 2013-10-26T14:04:00.087 回答