如何访问查询变量
本文关键字:查询 变量 访问 何访问 | 更新日期: 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);
}
这不能编译,因为y
在x
之外的另一个作用域中,您可以通过将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)));
}