在控制器的 linq 查询中缺少强制转换
Missing a cast in a linq query for a controller
我是 c# 控制器的新手,我正在尝试使用 LINQ 查询连接两个实体。但是我收到一条 'missing a cast' 错误消息,如下所示,我不明白它并不能帮助我更正错误。
控制器看起来像:
public class SoonDueReportsController_simple : BaseODataController
{
public SoonDueReportsController_simple(IUnitOfWork unitOfWork)
{
UnitOfWork = unitOfWork;
}
[Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
public SoonDueReportsController_simple Get()
{
var falligkeiten = UnitOfWork.GetAll<Fälligkeiten>();
var betriebe = UnitOfWork.GetAll<Betriebe>();
var query = (from betrieb in betriebe.AsQueryable()
join fallig in falligkeiten.AsQueryable()
on betrieb.ID equals
fallig.Betrieb_ID
where fallig.Fälligkeit_Erledigt_Datum == null
&& betrieb.Aktiv == true
select new
{
BetriebId = betrieb.ID,
FalligkeitObject = fallig.Fälligkeit_Objekt
});
return query;
}
}
这种类型的控制器我已成功用于单个实体(来自 sql 数据库的表)以在 kendo 网格中显示静态数据。但是当我尝试连接两个表时失败,如上所示。如果有人可以帮助我解决这个问题,我将不胜感激。
此致,马努
你select一个匿名对象的集合
select new
{
BetriebId = betrieb.ID,
FalligkeitObject = fallig.Fälligkeit_Objekt
});
并希望方法 return 某个类型的实例。 C# 是没有类型推断的强类型语言,这意味着如果你想 return 它们,你必须专门创建特定类型或接口的对象。
另外,您可以从 Get
方法中 return 编辑控制器类型本身。这是没有意义的。我实际上不知道你想做什么,但也许这会起作用:
public class SoonDueReportsController_simple : BaseODataController
{
public SoonDueReportsController_simple(IUnitOfWork unitOfWork)
{
UnitOfWork = unitOfWork;
}
[Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
public IQueryable<SomeModel> Get()
{
var falligkeiten = UnitOfWork.GetAll<Fälligkeiten>();
var betriebe = UnitOfWork.GetAll<Betriebe>();
var query = (from betrieb in betriebe.AsQueryable()
join fallig in falligkeiten.AsQueryable()
on betrieb.ID equals
fallig.Betrieb_ID
where fallig.Fälligkeit_Erledigt_Datum == null
&& betrieb.Aktiv == true
select new SomeModel
{
BetriebId = betrieb.ID,
FalligkeitObject = fallig.Fälligkeit_Objekt
});
return query;
}
}
public class SomeModel
{
public int BetriebId { get; set; }
public string FalligkeitObject { get; set; }
}
请记住,没有 "C# controllers" 这样的东西。您正在使用 OData,因此我建议您查看一些 OData 资源,那里有很多示例。
最后一件事,请不要误会我的意思,但这无助于提供属性、类型和其他标识符的德语名称。人们很难理解您的代码。
异常准确地向您解释了问题。您想要 return 一种 'SoonDueReportsController_simple' 类型,但您正在 returning 一个 Queryable,其中 a' 是您的新 { ..., ... } 对象。
我喜欢创建强类型对象并填充它的建议,但您也可以 return 动态类型。
这段代码的作用是解释:
private dynamic Get() => new { Name = "SomeName", Age = 31 };
private void TestGet()
{
var obj = Get();
var name = obj.Name;
var age = obj.Age;
}
我是 c# 控制器的新手,我正在尝试使用 LINQ 查询连接两个实体。但是我收到一条 'missing a cast' 错误消息,如下所示,我不明白它并不能帮助我更正错误。
控制器看起来像:
public class SoonDueReportsController_simple : BaseODataController
{
public SoonDueReportsController_simple(IUnitOfWork unitOfWork)
{
UnitOfWork = unitOfWork;
}
[Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
public SoonDueReportsController_simple Get()
{
var falligkeiten = UnitOfWork.GetAll<Fälligkeiten>();
var betriebe = UnitOfWork.GetAll<Betriebe>();
var query = (from betrieb in betriebe.AsQueryable()
join fallig in falligkeiten.AsQueryable()
on betrieb.ID equals
fallig.Betrieb_ID
where fallig.Fälligkeit_Erledigt_Datum == null
&& betrieb.Aktiv == true
select new
{
BetriebId = betrieb.ID,
FalligkeitObject = fallig.Fälligkeit_Objekt
});
return query;
}
}
这种类型的控制器我已成功用于单个实体(来自 sql 数据库的表)以在 kendo 网格中显示静态数据。但是当我尝试连接两个表时失败,如上所示。如果有人可以帮助我解决这个问题,我将不胜感激。 此致,马努
你select一个匿名对象的集合
select new
{
BetriebId = betrieb.ID,
FalligkeitObject = fallig.Fälligkeit_Objekt
});
并希望方法 return 某个类型的实例。 C# 是没有类型推断的强类型语言,这意味着如果你想 return 它们,你必须专门创建特定类型或接口的对象。
另外,您可以从 Get
方法中 return 编辑控制器类型本身。这是没有意义的。我实际上不知道你想做什么,但也许这会起作用:
public class SoonDueReportsController_simple : BaseODataController
{
public SoonDueReportsController_simple(IUnitOfWork unitOfWork)
{
UnitOfWork = unitOfWork;
}
[Queryable(AllowedQueryOptions = AllowedQueryOptions.All)]
public IQueryable<SomeModel> Get()
{
var falligkeiten = UnitOfWork.GetAll<Fälligkeiten>();
var betriebe = UnitOfWork.GetAll<Betriebe>();
var query = (from betrieb in betriebe.AsQueryable()
join fallig in falligkeiten.AsQueryable()
on betrieb.ID equals
fallig.Betrieb_ID
where fallig.Fälligkeit_Erledigt_Datum == null
&& betrieb.Aktiv == true
select new SomeModel
{
BetriebId = betrieb.ID,
FalligkeitObject = fallig.Fälligkeit_Objekt
});
return query;
}
}
public class SomeModel
{
public int BetriebId { get; set; }
public string FalligkeitObject { get; set; }
}
请记住,没有 "C# controllers" 这样的东西。您正在使用 OData,因此我建议您查看一些 OData 资源,那里有很多示例。
最后一件事,请不要误会我的意思,但这无助于提供属性、类型和其他标识符的德语名称。人们很难理解您的代码。
异常准确地向您解释了问题。您想要 return 一种 'SoonDueReportsController_simple' 类型,但您正在 returning 一个 Queryable,其中 a' 是您的新 { ..., ... } 对象。
我喜欢创建强类型对象并填充它的建议,但您也可以 return 动态类型。
这段代码的作用是解释:
private dynamic Get() => new { Name = "SomeName", Age = 31 };
private void TestGet()
{
var obj = Get();
var name = obj.Name;
var age = obj.Age;
}