Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
C# 如何实现动态Linq_C#_Linq_Entity Framework - Fatal编程技术网

C# 如何实现动态Linq

C# 如何实现动态Linq,c#,linq,entity-framework,C#,Linq,Entity Framework,我有一个Linq查询,它应该动态地处理许多参数。基于null条件,Where子句字符串应包括/排除Where子句字符串。我使用第三方动态Linq库来实现这一点。下面是代码 代码 var boo = (from b in db.Bibs from inf in db.InfoTypes.Where(info => info.Id == b.InfoTypeId).DefaultIfEmpty() from it in db.Items.Where(itms => itms.BibId

我有一个Linq查询,它应该动态地处理许多参数。基于null条件,Where子句字符串应包括/排除Where子句字符串。我使用第三方动态Linq库来实现这一点。下面是代码

代码

var boo = (from b in db.Bibs
from inf in db.InfoTypes.Where(info => info.Id == b.InfoTypeId).DefaultIfEmpty()
from it in db.Items.Where(itms => itms.BibId == b.Id).DefaultIfEmpty()
from ic in db.Collections.Where(coll => coll.Id == it.CollectionId).DefaultIfEmpty()
from il in db.ItemLocations.Where(iloc => iloc.Id == it.LocationId).DefaultIfEmpty()
from aacc in db.AdminAccounts.Where(aacc => aacc.Id == b.CreatedBy).DefaultIfEmpty()
from bc in db.BibContents.Where(bc => bc.BibId == b.Id).DefaultIfEmpty()
.Where("inf.Description='E-Working Papers'")
select new Book
{
    BibId = b.Id,
    Type = inf.Description,
    NoOfCopies = db.Items.Where(itms => itms.BibId == b.Id).Count(),
    createdby = db.AdminAccounts.Where(acc => acc.Id == b.CreatedBy).Select(aac => aac.Name).FirstOrDefault(),
    ModifiedBy = db.AdminAccounts.Where(acc => acc.Id == b.LastModifiedBy).Select(aac => aac.Name).FirstOrDefault(),
    createdon = b.CreatedOn,
    lastmodifiedon = b.LastModifiedOn,
    catalogdate = b.CatalogDate
}).GroupBy(g => new { g.BibId }).Select(s => s.FirstOrDefault());
当我运行上述代码时,我得到

LINQ to Entities无法识别方法System.LINQ.IQueryable[Vibrant\u ClassLibrary.BibContent]其中[BibContent](System.LINQ.IQueryable[Vibrant\u ClassLibrary.BibContent]、System.String、System.Object[])方法,并且无法将此方法转换为存储表达式


这是如上所述的类似问题。
您必须在
.Where(queryString)
调用之前插入
.AsEnumerable()
;否则,实体框架会尝试转换
查询字符串本身,但它无法转换。

这是一种非常强烈的代码味道,这表明应该在视图中完成此连接。EF或任何ORM都不能替代SQL,这是不应该使用它们的情况之一。将Book实体映射到视图而不是相反这是客户端的强烈建议。实际上,我这样做是为了ssrs报告,它使用xml作为数据源。所以,我必须对数据逻辑使用EF。我使用了支持此功能的Dynamic.Linq库。看到链接了吗好的,现在我找到你了。那么这可能和这里描述的问题是一样的:你能通过修改我的代码来发布代码吗??我在where子句之前插入了
.AsEnumerable()
。但它似乎不起作用。显示编译时错误。是否包含使用
指令导入动态Linq库的
?让我们来看看。