c# - 使用 LINQ 从 db 中选择不同的列名
问题描述
我有一个表,其中包含多个列,包括 CarMake、CarModel、CarModelLoading 等。我想选择不同的 CarMake 并将它们作为列表返回。我尝试了以下方法:
public IEnumerable<EbimaCarMakesAndModel> GetAll()
{
//var list<ebima>
return (IEnumerable<EbimaCarMakesAndModel>)context.EbimaCarMakesAndModels.Select(l => new { l.CarMake }).Distinct().ToList();
//var data = (from dbo in context.EbimaCarMakesAndModels where dbo.Listed == "Y" select dbo.CarMake).Distinct().OrderBy(name => name).ToList();
//return (IEnumerable<EbimaCarMakesAndModel>)data;
}
但是每当运行该应用程序时,我都会收到错误消息:
处理请求时发生未处理的异常。InvalidCastException:无法将“System.Collections.Generic.List
1[<>f__AnonymousType31
1[System.String]]”类型的对象转换为“System.Collections.Generic.IEnumerable`1[motor_backend.Models.EbimaCarMakesAndModel]”类型。我也尝试了以下但无济于事:
public IEnumerable<EbimaCarMakesAndModel> GetAll()
{
var res = context.EbimaCarMakesAndModels.GroupBy(x => new { x.CarMake }).
Select(x => x.FirstOrDefault()).Where(v => v.Listed == "Y").ToList();
return res;
}
它给了我以下错误:
FirstOrDefault()' 无法翻译。以可翻译的形式重写查询,或通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用显式切换到客户端评估。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。
到目前为止,这里给出的所有解决方案都没有回答我的问题
解决方案
要么声明您的方法以返回字符串的 IE:
public IEnumerable<string> GetAllMakes()
并且您的查询不创建匿名类型,而只需选择 make:
return context.EbimaCarMakesAndModels.Select(l => l.CarMake).Distinct().ToList();
或按 make 分组并从组列表中返回一些名义条目(但这对我来说真的没有意义)
return context.EbimaCarMakesAndModels.GroupBy(x => x.CarMake)
.Select(x => x.FirstOrDefault()).ToList();
您的最后一个查询引入了一些额外的未提及的约束 - 也许在分组之前.Where(v => v.Listed == "Y")
考虑这样做EbimaCarMakesAndModels