从LINQ中的Table-Value SQL函数返回一个列表?

时间:2015-02-18 12:51:56

标签: c# sql-server linq wcf

我有一个使用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对象。同样的错误...

1 个答案:

答案 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();  
    }