关于c#:无法从查询中返回linq结果

Cannot return linq result from query

嘿,所以我对C#还比较陌生,因为我在开始这份工作之前从来没有用过它。我试图从linq查询返回一个结果集。但是我遇到的问题是它的类型是匿名的。我已尝试为其创建自定义类型,以便使用它,但仍出现以下错误:

1
2
3
4
5
6
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的自定义类型。那我就可以还了。我想知道是否有人能帮助我,因为我有限的眼睛能看到我做的正确。我提前感谢你的帮助。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
   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();;
    }


此代码创建匿名类型:

1
2
3
4
5
select new
{
    Category = category,
    Item = item
}

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

1
2
3
4
5
select new ExportItemTable()
{
    Category = category,
    Item = item
}

在某些语言(如typescript)中,如果有一个对象与预期类型的属性相匹配,编译器会将它们视为相同的东西。C不会这样做,并强制您显式创建要使用的类型的实例。