【问题标题】:Create linq Query dynamically动态创建 linq 查询
【发布时间】:2015-10-01 14:57:20
【问题描述】:

我在 linq 查询(where)中创建条件时遇到了一些问题。 where 里面的条件是根据某些条件创建的。 我想根据两个属性(id_indice_prix、date_indice)过滤索引列表。我可以过滤它们两个或只过滤一个。你有什么建议吗? 我现在正在做的是我使用 linq 从数据库中获取所有行到实体,然后我会根据条件进行过滤:

   var listeIndiceActualisationPrix = UnitOfWork.Indices_actualisation_prix.ToList();

        if (IdIndicePrix != 0) 
            listeIndiceActualisationPrix = listeIndiceActualisationPrix.Where(x => x.id_indice_prix == IdIndicePrix).ToList();


        if(Annee !=0)
            listeIndiceActualisationPrix = listeIndiceActualisationPrix.Where(x => x.date_indice.Value.Year == Annee).ToList();

【问题讨论】:

    标签: c#-4.0 linq-to-entities


    【解决方案1】:

    不要每次都输入.ToList()。当您调用.ToList() 时,将执行查询。在不使用.ToList() 的情况下动态构建查询,并在if 语句的末尾执行.ToList() 以使用适当的WHERE 语句查询数据库。

    【讨论】:

    • 如果没有第一个 .ToList(),我无法避免对 listeIndiceActualisationPrix 进行过滤。
    • @ucef 你的错误信息是什么?你的UnitOfWork是什么,是你的ObjectContext吗?
    • 是的,它是 ObjectContext。我没有任何错误,但我只想避免获取所有行,然后根据条件进行过滤。我想知道是否可以在编译时动态构造条件
    • @ucef 如果你按照我提到的那样做,数据库将使用WHERE 参数进行查询,并且不会返回所有行。您可以使用 SQL Profiler 进行检查。
    • @ucef 试过 SQL Profiler 吗?我的提议是否正常工作?我能再帮你吗?
    猜你喜欢
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    相关资源
    最近更新 更多