C# 如何存储Linq查询并在以后使用?
我正在做一个wpf应用程序,我有一个小问题想问你 我在窗口级别查询数据库,并将查询结果传递给对象中的方法,如下所示: 窗口级别代码:C# 如何存储Linq查询并在以后使用?,c#,linq,dynamic,C#,Linq,Dynamic,我正在做一个wpf应用程序,我有一个小问题想问你 我在窗口级别查询数据库,并将查询结果传递给对象中的方法,如下所示: 窗口级别代码: payrollEmailManager.SetListOfSalariesToEmailTo( from Record in SqlInfo.SqlTable.T_SALs where Record.EtatPaie == 3 select new { Matricule = Record.MatriculeSalari
payrollEmailManager.SetListOfSalariesToEmailTo(
from Record in SqlInfo.SqlTable.T_SALs
where Record.EtatPaie == 3
select new {
Matricule = Record.MatriculeSalarie,
Nom = Record.Nom,
Prenom = Record.Prenom,
Email = Record.EMail });
这是我的方法定义:
public void SetListOfSalariesToEmailTo(object _ListOfSalaryToRecieveMail)
{
ListOfSalary = _ListOfSalaryToRecieveMail;
}
其中ListOfSalary
也是类型object
现在是我的问题,我有另一种方法,我想通过listofsalary
的每条记录,获得我在查询中选择的信息,如Matricule
或Email
,类似这样:
public void SendEmail()
{
foreach(var Salary in (dynamic)ListOfSalary)
{
Mail.To.Add(Salary.????
}
}
<>我不能引用<代码> NOM <代码>栏目或<代码>电子邮件<代码>栏目有任何建议吗??< /p> < p>如果您考虑以下查询:
var query = from Record in SqlInfo.SqlTable.T_SALs
where Record.EtatPaie == 3
select new {
Matricule = Record.MatriculeSalarie,
Nom = Record.Nom,
Prenom = Record.Prenom,
Email = Record.EMail
};
在运行这一行之后,还没有对数据库执行查询。只有当您具体化它时(使用诸如ToList()
/ToArray()
/FirstOrDefault
等函数),它才会在数据库中实际执行并返回信息
因此,如果您只是执行SomeFunction(查询)代码>它不执行查询,您可以将其存储以供以后执行
但是,您确实需要稍微更改代码:
- 函数不应获取对象,但应
IQueryable
您仍然可以像以前一样使用object
和dynamic
,只访问属性,但您将无法使用intellisense显示属性和选项,因为它不知道具体类型。您所说的“我不能引用”是什么意思?如果您尝试,会发生什么?您使用的是动态类型,因此您不应该期望Intellisense提供任何建议,但如果您只使用属性,它可能会起作用。但是,每次调用sendmail
时,您都将执行查询。为了避免这种情况,您可能希望具体化查询,例如,在查询结束时调用ToList()
(您调用SetListOfSalariesToEmail
)。但不清楚为什么要动态地执行所有这些操作。为什么不使用一个包含您需要的所有信息的合适类型呢?我将使用SQL DataAdapter并将结果放入数据表中。然后,您可以将datatable传递给代码的其余部分,而不是在本例中使用linq。@Soufiane.Ach-这有助于您解决问题吗?
public void SetListOfSalariesToEmailTo(IQueryable<T> query)
var query = from Record in SqlInfo.SqlTable.T_SALs
where Record.EtatPaie == 3
select new SomeType {
Matricule = Record.MatriculeSalarie,
Nom = Record.Nom,
Prenom = Record.Prenom,
Email = Record.EMail
};
public void SetListOfSalariesToEmailTo(IQueryable<SomeType> query)
{
ListOfSalary = query;
}