连接表时丢弃 "Anonymous" 异常

Discarding "Anonymous" exception while joining tables

我很困惑,如何在不出现 "Anonymous" 异常的情况下连接两个表;例如下面的代码片段:

 var result = (from prod in context.ProductsTbls
                              join imag in context.ProductImagesTbls
                              on prod.Id equals imag.ProductId
                              where prod.UserId == 4 && imag.IsDefaultImage == true
                              select new
                              {
                                  Id = prod.Id,
                                  ProductName = prod.ProductName,
                                  ProductDescription = prod.ProductDescription,
                                  ProductCategory = prod.ProductCategory,
                                  ProductPricePerDay = prod.ProductPricePerDay,
                                  ProductPricePerWeek = prod.ProductPricePerWeek,
                                  ProductPricePerMonth = prod.ProductPricePerMonth,
                                  CreationDate = prod.CreationDate,
                                  ModificationDate = prod.ModificationDate,
                                  Image = imag.Image
                              }).ToList();


                IEnumerable<ProductsTbl> data =
 (IEnumerable<ProductsTbl>)result.ToList(); // Exception appears here
                DataTable table = new DataTable();

                using (var reader = ObjectReader.Create(data, "Id", "Image"))
                {
                    table.Load(reader);
                }

执行上述代码后,出现此异常:

System.InvalidCastException: 'Unable to cast object of type 
        'System.Collections.Generic.List`1[<>f__AnonymousType1`10[System.Int32,System.Str
    ing,System.String,System.String,System.Nullable`1[System.Int32],System.Nullable`1
    [System.Int32],System.Nullable`1[System.Int32],System.Nullable`1[System.DateTime]
    ,System.Nullable`1[System.DateTime],System.Byte[]]]' to type 
    'System.Collections.Generic.IEnumerable`1[ClassLibrary1.ProductsTbl]'.'

一般来说,当您需要LINQ查询的结果是IEnumerable或某种类型的集合时,您需要在select.[=中创建该类型的实例。 15=]

因此,您可以使用:

而不是 select new { ... }
select new ProductsTbl {
    // put field values here
}