从LINQ到SQL查询获取另一个类

时间:2015-11-26 12:25:24

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

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

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

请帮忙!

提前致谢!

1 个答案:

答案 0 :(得分:2)

您可以这样做:

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

基本上,您首先需要对数据库执行一次查询,这将返回包含产品及其Def的匿名类型。 最后,你循环(在内存中,没有数据库调用!),创建最终对象,并填充RelatedProductDef属性。