嘿所以我对C#
相当新,因为我在开始这份工作之前从未使用它。我试图从linq
查询返回结果集。但是我遇到的问题是它的类型是匿名的。我已经尝试为它创建一个自定义类型,所以我可以使用它,但我仍然收到错误:
Severity Code Description Project File Line Suppression State
Error CS0266 Cannot implicitly convert type 'System.Linq.IQueryable<<anonymous type:
SCSEntities.SCS_ItemCategory Category, SCSEntities.SCS_Item Item>>' to
'System.Collections.Generic.List<SchoolCash.DataFactory.ItemFactory.ExportItemTable>'.
An explicit conversion exists (are you missing a cast?) SchoolCash.DataFactory
C:\seamysCode\SCA\4.12\Common\SchoolCash.DataFactory\ItemFactory.cs 551 Active
所以我想知道我在这里遗漏了一些东西,因为我看过的东西说根据需要创建一个带有get和setter的自定义类型。然后我应该能够归还它。我想知道有人可以帮助我,因为我有限的眼睛可以看到我正确地做到了这一点。我提前感谢你的帮助。
public class ExportItemTable
{
public SCS_ItemCategory Category { get; set; }
public Item Item { get; set; }
}
public List<ExportItemTable> GetItemExportTable()
{
var result =
from item in Context.SCS_Items
join category in Context.SCS_ItemCategories
on item.ItemPk equals category.ItemFk
into temp
from category in temp.DefaultIfEmpty()
select new
{
Category = category,
Item = item
};
return result.ToList();;
}
答案 0 :(得分:4)
此代码创建一个匿名类型:
select new
{
Category = category,
Item = item
}
您只需要创建一个所需类型的实例,如下所示:
select new ExportItemTable()
{
Category = category,
Item = item
}
在某些语言(如TypeScript)中,如果您有一个与期望类型的属性匹配的对象,编译器会将它们视为相同的东西。 C#不会这样做并强制您显式创建要使用的类型的实例。