简体   繁体   English

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

[英]what is output type of method when returns result of linq query?

I use Linq query instead of using Sqlserver's view. 我使用Linq查询而不是使用Sqlserver的视图。 I want to put it in method .what is my output type? 我想将其放在方法中。我的输出类型是什么? thanks for helping 谢谢你的帮助

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

Unfortunately you can't return anonymous types from methods: 不幸的是,您不能从方法中返回匿名类型

You cannot declare a field, a property, an event, or the return type of a method as having an anonymous type. 您不能将字段,属性,事件或方法的返回类型声明为具有匿名类型。 Similarly, you cannot declare a formal parameter of a method, property, constructor, or indexer as having an anonymous type. 同样,您不能将方法,属性,构造函数或索引器的形式参数声明为具有匿名类型。 To pass an anonymous type, or a collection that contains anonymous types, as an argument to a method, you can declare the parameter as type object. 要将匿名类型或包含匿名类型的集合作为方法的参数传递,可以将参数声明为类型对象。

So, either create some specific type for this data and return it: 因此,要么为此数据创建一些特定类型并返回它:

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

Or return object (which I find a little useless): 或返回object (我发现它没什么用):

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

That's the case when dynamic may come in handy. 当动态可能派上用场时就是这种情况。

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

And then you can use something like: 然后,您可以使用类似:

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

You can return the new list as IList. 您可以将新列表作为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();

And to access the item 并访问该项目

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

To simplify things, I would suggest you to create a kind of a POCO class with the required properties in order to represent the required projection properly instead of selecting it as anonymous type and get involved with annoying dangerous castings. 为简化起见,我建议您创建一种具有所需属性的POCO类,以便正确表示所需的投影,而不是将其选择为匿名类型并参与到恼人的危险铸件中。

Create your POCO class as: 创建您的POCO类为:

public class InsuranceWorker
{
  public int InsWorkerId {get;set;}
  public int InsWorkerCreateUserId {get;set;}

  //Keep add the necessary properties here...
}

Usage: 用法:

Replace your anonymous selection ( select new ) statement with the known type which we've just created above: 将您的匿名选择( select new )语句替换为我们上面刚刚创建的已知类型:

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

and return IList<InsuranceWorker> : 并返回IList<InsuranceWorker>

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM