Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何存储Linq查询并在以后使用?_C#_Linq_Dynamic - Fatal编程技术网

C# 如何存储Linq查询并在以后使用?

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

我正在做一个wpf应用程序,我有一个小问题想问你

我在窗口级别查询数据库,并将查询结果传递给对象中的方法,如下所示:

窗口级别代码:

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