【问题标题】:C# IQueryable<T> does my code make sense?C# IQueryable<T> 我的代码有意义吗?
【发布时间】:2010-05-04 03:59:38
【问题描述】:

我使用它从我的数据库中获取材料列表....

  public IQueryable<MaterialsObj> FindAllMaterials()
    {
       var materials =  from m in db.Materials
           join Mt in db.MeasurementTypes on m.MeasurementTypeId equals Mt.Id
           select new MaterialsObj()
               {
                   Id = Convert.ToInt64(m.Mat_id),
                   Mat_Name = m.Mat_Name,
                   Mes_Name = Mt.Name,
               };
        return materials;
    }

但是我在一个例子中看到了这个,

public IQueryable<MaterialsObj> FindAllMaterials()
{
   return from m in db.Materials
       join Mt in db.MeasurementTypes on m.MeasurementTypeId equals Mt.Id
       select new MaterialsObj()
           {
               Id = Convert.ToInt64(m.Mat_id),
               Mat_Name = m.Mat_Name,
               Mes_Name = Mt.Name,
           };
}

这两种方法之间真的有很大区别吗...将我的 linq 查询分配给一个变量并返回它...这是一种好/坏的做法吗?我应该使用什么建议?

【问题讨论】:

    标签: c# iqueryable


    【解决方案1】:

    没有真正的区别。在发布/优化构建中,无论如何,我希望编译器删除额外的本地。如果您想在返回之前放置一个断点并检查该值,或者如果您想应用额外的条件过滤,则使用该变量非常有用,例如:

    if(applySort) { materials = materials.OrderBy(x => x.Name); }
    

    在您的示例中,它没有添加任何东西,但它也没有花费任何东西。随意保留它;特别是如果您认为它使代码更易于阅读。

    【讨论】:

      【解决方案2】:

      没有区别,但通常我使用第一个版本,如果我想在返回数据之前查看数据,可以更轻松地在 Visual Studio 中设置监视或断点。

      【讨论】:

        猜你喜欢
        • 2019-04-24
        • 2010-10-31
        • 2012-04-22
        • 2010-10-03
        • 1970-01-01
        • 1970-01-01
        • 2017-01-02
        • 2016-09-28
        • 2020-12-22
        相关资源
        最近更新 更多