【问题标题】:Get another class from LINQ to SQL query从 LINQ 获取另一个类到 SQL 查询
【发布时间】:2015-11-26 12:25:23
【问题描述】:

我的 LINQ to SQL 有点弱,所以会尝试解释我的问题。

我有一个方法如下(简化为更好解释):

public static List<ic_ProductData> GetCompleteSimilarProductsWithApplyButton(InfoChoiceAdminDataContext db)
{

    var products = (from
                        p in db.ic_ProductDatas
                    join proddef in db.ic_ProductDefs on p.ProductDefId equals proddef.ProductDefId

                    select p
                        ).ToList();

    return products;
}

ic_ProductDataic_ProductDefs 是我数据库中的表

ic_ProductData 类包含手动创建的属性:

public ic_ProductDef RelatedProductDef { get; set; }

我想修改上面的 LINQ to SQL 查询,以便我可以填充这个属性。

请注意,我不想再次调用数据库。

ic_ProductData 中还有很多属性,所以我想避免映射每个属性

大意如下(显然下面是错误的):

public static List<ic_ProductData> GetCompleteSimilarProductsWithApplyButton(InfoChoiceAdminDataContext db)
{

    var products = (from
                        p in db.ic_ProductDatas
                    join proddef in db.ic_ProductDefs on p.ProductDefId equals proddef.ProductDefId
                    //trying to change here
                    select new ic_ProductData
                    {
                        //do something with p here so that all the properties of new object gets filled
                        // avoid mapping of properties here
                        RelatedProductDef = proddef
                    }
                        ).ToList();

    return products;
}

由于我的知识有限,我被困在这里。

请帮忙!

提前致谢!

【问题讨论】:

    标签: c# linq linq-to-sql linq-to-objects


    【解决方案1】:

    你可以这样做:

    var query = (from p in db.ic_ProductDatas
                    join proddef in db.ic_ProductDefs on p.ProductDefId equals proddef.ProductDefId
                    select new 
                    {
                        ProductData = p,
                        Def = proddef
                    }).ToList();
    
    List<ic_ProductData> products = new List<ic_ProductData>();
    foreach( var product in query)
    {
      product.ProductData.RelatedProductDef = product.Def;
      products.Add(product);
    }
    

    基本上,您首先需要对数据库进行一次查询,这将返回一个匿名类型,其中包含您的产品及其定义。 最后,您循环(在内存中,没有 db-calls!)这些,创建您的最终对象,并填充了它们的 RelatedProductDef 属性。

    【讨论】:

    • .ToList() 是不必要的,因为该语句返回一个 System.Linq.IQueryable&lt;&gt;,它可以在 foreach 循环中使用
    • @ViRuSTriNiTy 确实没有必要,但我确实发现它的影响(在性能方面)很小。
    • @Tom Wuyts 这似乎是一个很好的解决方案。会试一试!很快就会更新你。我投票赞成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多