我有一个使用Entity Framework 6(_Context
)的WCF服务,它成功地调用了我的SQL数据库中的许多函数,但是,我在调用表值函数时遇到了问题。
我的函数接受一个字符串参数user
,并使用where
子句创建一个视图,以确定该用户可以看到的内容。这可以按预期工作,例如:
SELECT * FROM ises.fnarticles ('ANDREW')
我现在正尝试从我的WCF服务调用该函数并将结果返回到列表:
public List<vwArticle> GetArticlesByAnalyst(string user)
{
return ((IObjectContextAdapter)_Context).ObjectContext.CreateQuery<vwArticle>("SELECT VALUE ISESModel.Store.fnarticles(@userName) FROM {1}",
new ObjectParameter("userName", user)).ToList();
}
我收到错误:
{"The specified cast from a materialized 'System.Collections.Generic.IEnumerable`1[System.Data.Common.DbDataRecord]' type to the 'IsesServiceModel.vwArticle' type is not valid."}
我无法返回列表或单个vwArticle对象。同样的错误...
答案 0 :(得分:0)
这种方法很长,但实现了我所需要的。好像你可以使用LINQ来查询表值函数,好像它是一个表...
public List<vwArticle> GetArticlesByAnalyst(string user)
{
List<vwArticle> ArticlesByAnyalist = new List<vwArticle>();
var query = from a in _Context.fnarticles(user)
select a;
foreach (var a in query)
{
var article = new vwArticle
{
ArticleId = a.ArticleId,
ArticleTitle = a.ArticleTitle,
Country = a.Country,
userUpdated = a.userUpdated,
userCreated = a.userCreated,
dateCreated = a.dateCreated,
dateUpdated = a.dateUpdated,
versionDate = a.versionDate
};
ArticlesByAnyalist.Add(article);
}
return ArticlesByAnyalist;
}
然后调用我的方法传递用户名&amp;查询清单:
public List<vwArticle> GetArticles(string filter)
{
var ArticlesByAnalyst = GetArticlesByAnalyst("GEMMA");
var query = from a in ArticlesByAnalyst
where blah blah
select a;
return query.ToList();
}