嘿,对于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();;
    }

最佳答案

这段代码创建了一个匿名类型:

select new
{
    Category = category,
    Item = item
}


您只需要创建所需类型的实例,如下所示:

select new ExportItemTable()
{
    Category = category,
    Item = item
}


在某些语言(如TypeScript)中,如果您有一个与期望类型的属性匹配的对象,则编译器会将它们视为同一对象。 C#不会这样做,而是强迫您显式创建要使用的类型的实例。

07-24 09:50