gpt4 book ai didi

c# - 无法将类型 'System.Linq.IQueryable' 隐式转换为 'System.Collections.Generic.ICollection

转载 作者:行者123 更新时间:2023-11-30 13:26:36 24 4
gpt4 key购买 nike

我有以下模型类:-

public class CustomerCustomAssetJoin
{
public CustomAsset CustomAsset { get; set; }
public ICollection<CustomAsset> CustomAssets { get; set; }

}

但是当我写下下面的方法时:-

public CustomerCustomAssetJoin CustomerCustomAsset(string customerName)
{
var customerAssets = tms.CustomAssets.Include(a => a.CustomAssetType).Where(a => a.CustomerName.ToLower() == customerName.ToLower());
CustomerCustomAssetJoin caj = new CustomerCustomAssetJoin
{
CustomAsset = new CustomAsset {CustomerName = customerName },
CustomAssets = customerAssets
};
return caj;
}

我遇到以下异常:

Error 20 Cannot implicitly convert type 'System.Linq.IQueryable' to 'System.Collections.Generic.ICollection'. An explicit conversion exists (are you missing a cast?)

那么是什么导致了这个错误呢?为了克服这个错误,我只需添加一个 .toList() 如下:

var customerAssets = tms.CustomAssets.Include(a => a.CustomAssetType).Where(a => a.CustomerName.ToLower() == customerName.ToLower());

那么为什么我必须将其转换为列表?

最佳答案

您在 customerAssets 中存储的内容只是一个查询 - 一种方式,如何获取数据。它还不是数据本身,因为它是惰性评估的。 ICollection<T>是为操作您已有的数据集合而构建的接口(interface)。查询未实现它,因此您不能从 IQueryable<T> 隐式转换到 ICollection<T>打电话ToList()是一种将数据强制加载到 ICollection<T> 中的简单方法,但这也意味着在您的情况下,在代码中的那个位置(和执行时间)查询将被执行并且数据将从您正在查询的任何数据库加载。

关于c# - 无法将类型 'System.Linq.IQueryable<TMS.Models.CustomAsset>' 隐式转换为 'System.Collections.Generic.ICollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20241810/

24 4 0