我是c#controllers的新手,我正在尝试使用LINQ查询连接两个实体。但是我收到了一条“丢失的演员”错误消息,如下所示,我不明白,它无法帮助我纠正错误。
控制器看起来像:
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 db的表)以在kendo网格中显示静态数据。但是当我尝试加入如上所示的两个表时,我失败了。如果有人可以帮我解决这个问题,我会非常感激。 此致,Manu
答案 0 :(得分:2)
您选择一组匿名对象
select new
{
BetriebId = betrieb.ID,
FalligkeitObject = fallig.Fälligkeit_Objekt
});
并希望该方法返回某种类型的实例。 C#是没有类型推断的强类型语言,这意味着如果要返回它们,则必须专门创建特定类型或接口的对象。
此外,您要从Get
方法返回控制器类型本身。这毫无意义。我实际上不知道你想做什么,但可能会这样做:
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#控制器”之类的东西。你正在使用OData,所以我建议你看看一些OData资源,那里有很多例子。
最后一件事,不要误会我的意思,但它没有帮助给出属性,类型和其他标识符德语名称。人们很难尝试理解你的代码。
答案 1 :(得分:1)
该例外确切地向您解释了问题。您想要返回一种类型的SoonDueReportsController_simple&#39;但是你要返回一个Queryable,其中一个&#39;是你的新{...,...}对象。
我喜欢制作强类型对象并填充它的建议,但您也可以返回动态类型。
此代码可用于解释:
private dynamic Get() => new { Name = "SomeName", Age = 31 };
private void TestGet()
{
var obj = Get();
var name = obj.Name;
var age = obj.Age;
}