连接表时丢弃 "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
}
我很困惑,如何在不出现 "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
}