如何访问查询变量

本文关键字:查询 变量 访问 何访问 | 更新日期: 2023-09-27 18:01:44

如何在if作用域之外读取查询变量并进一步使用它?

If (IsPaymentList)
{
            var query = paymentList.GroupBy(
            grp => (grp.GrouByField),
            (GrouByField, paymentListgroup) => new
            {
                Key = GrouByField,
                receiptAmount = paymentListgroup.Sum(fields => fields.PaymentAmount),
                creditAccountnumber = paymentListgroup.Max(fields => fields.CreditAccountNumber),
                bankAccountName = paymentListgroup.Max(fields => fields.AccountName),
                bankName = paymentListgroup.Max(fields => fields.BankName),
                payCurrency = paymentListgroup.Max(fields => fields.PaymentCurrencyID),
                partnerServiceID = paymentListgroup.Max(fields => fields.PartnerServiceID),
            });
}
谁来分享一下你的经验。由于

如何访问查询变量

您需要做的是将查询变量移出if语句的上下文中。

这是一个关于如何使用整数列表的示例:

var list = new [] { 10, 3, 2, 4, 6, 7, 8 };
var condition = false;
IEnumerable<IGrouping<int,int>> query;
if(condition)
{
    query = list.GroupBy(x => x);
}

如果我愿意,我可以在if语句之后继续像这样查询query变量:

query.Take(2)

这里的问题是,您希望在创建它的作用域之外使用query变量。

考虑以下内容:

static void Main(string[] args)
{
    var x = 10;
    {
        var y = 20;
    }
    Console.WriteLine(x+y);
}

这不能编译,因为yx之外的另一个作用域中,您可以通过将y的声明移到该作用域中来解决这个问题。这样的:

var x = 10;
int y;
{
    y = 20;
}
Console.WriteLine(x+y);

在这种情况下,当声明y时不能使用var,因为这意味着你也在告诉编译器它是什么类型。而你不是。所以写var y;没有任何意义,但var y = 10;有意义,因为现在编译器知道这实际上是一个整数。

您可以将查询变量声明为类型IQueryable<IGrouping<typeOfKey,typeOfSelect>> query = null;并将其设置为null,其中typeOfKey是grp的类型。GrouByField财产。为了不选择匿名类型,您必须创建一个具有所需属性的新类,如下所示:

public class NewClass
{
     public int Key {get;set;}
     public decimal ReceiptAmount {get;set;}
     //add all the properties here
     public NewClass(string key,decimal recieptAmount)
     {
          //and add constructor for all the needed properties
     }
}

创建类后,将查询设置为泛型类型

//i used int for your grp.GrouByField type
IQueryable<IGrouping<int,NewClass>> query = null;
if(IsPaymentList)
{
    query = paymentList.GroupBy(
            grp => (grp.GrouByField),
            (GrouByField, paymentListgroup) => 
            new NewClass(GrouByField, 
            paymentListgroup.Sum(fields => fields.PaymentAmount), 
            paymentListgroup.Max(fields => fields.CreditAccountNumber), 
            paymentListgroup.Max(fields => fields.AccountName), 
            paymentListgroup.Max(fields => fields.BankName), 
            paymentListgroup.Max(fields => fields.PaymentCurrencyID), 
            paymentListgroup.Max(fields => fields.PartnerServiceID)));
}