Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 使用具有由其他方法创建的子项的实体从RIA服务调用查询_Linq_Entity Framework_Wcf Ria Services - Fatal编程技术网

Linq 使用具有由其他方法创建的子项的实体从RIA服务调用查询

Linq 使用具有由其他方法创建的子项的实体从RIA服务调用查询,linq,entity-framework,wcf-ria-services,Linq,Entity Framework,Wcf Ria Services,我有一些代码不起作用,因为Entity Framework无法识别CreateItemDC方法CreateItemDC是一个模块化的私有方法,它为给定的项实体创建数据契约。每当我需要返回项目数据合同时,我会在整个服务过程中使用CreateItemDC,但我不能在这里使用它。我可以将ProjectItems序列实现为一个数组或可枚举项,因为我必须对数据库中的所有ProjectItem实体执行此操作,因为查询条件在客户端上指定,我在这里没有访问权。我这里有更好的选择吗?看来RIA服务不值得这么麻烦。

我有一些代码不起作用,因为Entity Framework无法识别
CreateItemDC
方法
CreateItemDC
是一个模块化的私有方法,它为给定的
实体创建数据契约。每当我需要返回项目数据合同时,我会在整个服务过程中使用
CreateItemDC
,但我不能在这里使用它。我可以将
ProjectItems
序列实现为一个数组或可枚举项,因为我必须对数据库中的所有
ProjectItem
实体执行此操作,因为查询条件在客户端上指定,我在这里没有访问权。我这里有更好的选择吗?看来RIA服务不值得这么麻烦。我真希望我在这个项目中使用了普通的WCF

    [Query]
    public IQueryable<ProjectItemDC> GetProjectItems()
    {
        return from projectItem in ObjectContext.ProjectItems
               select new ProjectItemDC
               {
                   ID = projectItem.ID,
                   LibraryItem = CreateItemDC(projectItem.LibraryItem),
                   LibraryItemID = projectItem.LibraryItemID,
                   ProjectID = projectItem.ProjectID,
                   Quantity = projectItem.Quantity,
                   Width = projectItem.Width,
                   Height = projectItem.Height,
                   Depth = projectItem.Depth,
                   SheetMaterialID = projectItem.SheetMaterialID,
                   BandingMaterialID = projectItem.BandingMaterialID,
                   MaterialVolume = projectItem.MaterialVolume,
                   MaterialWeight = projectItem.MaterialWeight
               };
    }
[查询]
公共IQueryable GetProjectItems()
{
从ObjectContext.ProjectItems中的projectItem返回
选择new ProjectItemDC
{
ID=projectItem.ID,
LibraryItem=CreateItemDC(projectItem.LibraryItem),
LibraryItemID=projectItem.LibraryItemID,
ProjectID=projectItem.ProjectID,
数量=项目项数量,
宽度=投影项宽度,
高度=投影项目高度,
深度=投影项目深度,
SheetMaterialID=projectItem.SheetMaterialID,
BandingMaterialID=projectItem.BandingMaterialID,
MaterialVolume=项目项MaterialVolume,
物料重量=项目物料重量
};
}

另外,我确实喜欢林克和E.F.:)

好吧,如果您想使用普通WCF,您可以,没问题,只需将代码更改为

[Query(IsComposable=false)]
public IEnumerable<ProjectItemDC> GetProjectItems(string myParm1, string myParm2) 
    { 
        return from projectItem in ObjectContext.ProjectItems 
               select new ProjectItemDC 
               { 
                   ID = projectItem.ID, 
                   LibraryItem = CreateItemDC(projectItem.LibraryItem), 
                   LibraryItemID = projectItem.LibraryItemID, 
                   ProjectID = projectItem.ProjectID, 
                   Quantity = projectItem.Quantity, 
                   Width = projectItem.Width, 
                   Height = projectItem.Height, 
                   Depth = projectItem.Depth, 
                   SheetMaterialID = projectItem.SheetMaterialID, 
                   BandingMaterialID = projectItem.BandingMaterialID, 
                   MaterialVolume = projectItem.MaterialVolume, 
                   MaterialWeight = projectItem.MaterialWeight 
               }.ToArray(); 
    } 
[查询(IsComposable=false)]
公共IEnumerable GetProjectItems(字符串myParm1、字符串myParm2)
{ 
从ObjectContext.ProjectItems中的projectItem返回
选择new ProjectItemDC
{ 
ID=projectItem.ID,
LibraryItem=CreateItemDC(projectItem.LibraryItem),
LibraryItemID=projectItem.LibraryItemID,
ProjectID=projectItem.ProjectID,
数量=项目项数量,
宽度=投影项宽度,
高度=投影项目高度,
深度=投影项目深度,
SheetMaterialID=projectItem.SheetMaterialID,
BandingMaterialID=projectItem.BandingMaterialID,
MaterialVolume=项目项MaterialVolume,
物料重量=项目物料重量
}.ToArray();
} 
编写自己的筛选/排序逻辑,就完成了。 是的,您已经失去了WCF Ria服务的动态查询功能,但这正是您使用普通的旧WCF所得到的,不是吗

如果您需要WCF Ria动态排序/过滤/分组,则必须执行一些额外的步骤,包括访问WCF Ria服务为您创建的表达式


HTH

好吧,如果您想使用普通WCF,您可以,没问题,只需将代码更改为

[Query(IsComposable=false)]
public IEnumerable<ProjectItemDC> GetProjectItems(string myParm1, string myParm2) 
    { 
        return from projectItem in ObjectContext.ProjectItems 
               select new ProjectItemDC 
               { 
                   ID = projectItem.ID, 
                   LibraryItem = CreateItemDC(projectItem.LibraryItem), 
                   LibraryItemID = projectItem.LibraryItemID, 
                   ProjectID = projectItem.ProjectID, 
                   Quantity = projectItem.Quantity, 
                   Width = projectItem.Width, 
                   Height = projectItem.Height, 
                   Depth = projectItem.Depth, 
                   SheetMaterialID = projectItem.SheetMaterialID, 
                   BandingMaterialID = projectItem.BandingMaterialID, 
                   MaterialVolume = projectItem.MaterialVolume, 
                   MaterialWeight = projectItem.MaterialWeight 
               }.ToArray(); 
    } 
[查询(IsComposable=false)]
公共IEnumerable GetProjectItems(字符串myParm1、字符串myParm2)
{ 
从ObjectContext.ProjectItems中的projectItem返回
选择new ProjectItemDC
{ 
ID=projectItem.ID,
LibraryItem=CreateItemDC(projectItem.LibraryItem),
LibraryItemID=projectItem.LibraryItemID,
ProjectID=projectItem.ProjectID,
数量=项目项数量,
宽度=投影项宽度,
高度=投影项目高度,
深度=投影项目深度,
SheetMaterialID=projectItem.SheetMaterialID,
BandingMaterialID=projectItem.BandingMaterialID,
MaterialVolume=项目项MaterialVolume,
物料重量=项目物料重量
}.ToArray();
} 
编写自己的筛选/排序逻辑,就完成了。 是的,您已经失去了WCF Ria服务的动态查询功能,但这正是您使用普通的旧WCF所得到的,不是吗

如果您需要WCF Ria动态排序/过滤/分组,则必须执行一些额外的步骤,包括访问WCF Ria服务为您创建的表达式

HTH

您可以对
ObjectContext.ProjectItems
调用
ToArray()
以强制EF加载所有项目,但是,您的查询将不再在客户端上可组合

[Query]
public IQueryable<ProjectItemDC> GetProjectItems()
{
    return from projectItem in ObjectContext.ProjectItems.ToArray()
           select new ProjectItemDC
           {
               ID = projectItem.ID,
               LibraryItem = CreateItemDC(projectItem.LibraryItem),
               LibraryItemID = projectItem.LibraryItemID,
               ProjectID = projectItem.ProjectID,
               Quantity = projectItem.Quantity,
               Width = projectItem.Width,
               Height = projectItem.Height,
               Depth = projectItem.Depth,
               SheetMaterialID = projectItem.SheetMaterialID,
               BandingMaterialID = projectItem.BandingMaterialID,
               MaterialVolume = projectItem.MaterialVolume,
               MaterialWeight = projectItem.MaterialWeight
           };
}
您可以对
ObjectContext.ProjectItems
调用
ToArray()
,以强制EF加载所有项目,但是,您的查询将不再在客户端上可组合

[Query]
public IQueryable<ProjectItemDC> GetProjectItems()
{
    return from projectItem in ObjectContext.ProjectItems.ToArray()
           select new ProjectItemDC
           {
               ID = projectItem.ID,
               LibraryItem = CreateItemDC(projectItem.LibraryItem),
               LibraryItemID = projectItem.LibraryItemID,
               ProjectID = projectItem.ProjectID,
               Quantity = projectItem.Quantity,
               Width = projectItem.Width,
               Height = projectItem.Height,
               Depth = projectItem.Depth,
               SheetMaterialID = projectItem.SheetMaterialID,
               BandingMaterialID = projectItem.BandingMaterialID,
               MaterialVolume = projectItem.MaterialVolume,
               MaterialWeight = projectItem.MaterialWeight
           };
}

如何获取表达式?重写DomainService类的查询方法,如果客户端已指定表达式,则参数queryDescription的属性查询将被定值。因此,您可以获取queryDescription.Query.Expression如何获取表达式?重写DomainService类的查询方法,如果客户端已指定表达式,则参数queryDescription的属性查询将被定值。因此,您可以获取queryDescription.Query.expression这将在数据库中每个
项目项
实体的内存中创建一个数组。这不是一个选项。除非您在客户机上编写查询,否则您已经在提取所有数据。这就是我最后要做的。我的下一个项目将使用WCF。我想如果你做的是纯CRUD RIA服务是有道理的,但我在过去一年左右遇到了很多困难,所以我很担心