在 Lambda 表达式和表达式树中使用 Join 运算符时出现问题

发布于 2024-11-04 04:06:47 字数 1329 浏览 3 评论 0原文

我写了这个方法:

public List<TResult2> SelectAndJoin<TOuter, TInner, TKey, TResult, TResult2>(IEnumerable<TInner> inner, 
                                                                      System.Linq.Expressions.Expression<Func<Regions, TKey>> outerKeySelector, 
                                                                      System.Linq.Expressions.Expression<Func<TInner, TKey>> innerKeySelector, 
                                                                      System.Linq.Expressions.Expression<Func<Regions, TInner, TResult>> resultSelector,
                                                                      Func<Regions, TResult2> selector)
    {
        using (RepositoryDataContext = new DataClasses1DataContext())
        {
                return RepositoryDataContext.Regions.Join(inner, outerKeySelector, innerKeySelector, resultSelector).AsEnumerable<TResult2>().Select<Regions, TResult2>(selector).ToList<TResult2>();

        }
    }

但是 return 后面的表达式有这个错误:

“System.Linq.IQueryable”不包含“AsEnumerable”的定义,并且最佳扩展方法重载“System.Linq.Enumerable.AsEnumerable(System.Collections.Generic.IEnumerable)”具有一些无效参数

我如何摆脱这个错误?

这个代码是标准的吗?

谢谢

I write this method:

public List<TResult2> SelectAndJoin<TOuter, TInner, TKey, TResult, TResult2>(IEnumerable<TInner> inner, 
                                                                      System.Linq.Expressions.Expression<Func<Regions, TKey>> outerKeySelector, 
                                                                      System.Linq.Expressions.Expression<Func<TInner, TKey>> innerKeySelector, 
                                                                      System.Linq.Expressions.Expression<Func<Regions, TInner, TResult>> resultSelector,
                                                                      Func<Regions, TResult2> selector)
    {
        using (RepositoryDataContext = new DataClasses1DataContext())
        {
                return RepositoryDataContext.Regions.Join(inner, outerKeySelector, innerKeySelector, resultSelector).AsEnumerable<TResult2>().Select<Regions, TResult2>(selector).ToList<TResult2>();

        }
    }

but the expression follow return has this Error:

'System.Linq.IQueryable' does not contain a definition for 'AsEnumerable' and the best extension method overload 'System.Linq.Enumerable.AsEnumerable(System.Collections.Generic.IEnumerable)' has some invalid arguments

How I can get rid of this error?

is this code standard?

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

赠意 2024-11-11 04:06:47

您正在对类型为 IQueryable 的枚举调用 AsEnumerable。您应该调用 AsEnumerable 或者您甚至可以省略泛型参数并调用 AsEnumerable()

另外,您的下一个选择将因同样的原因而不起作用 - 您提供了错误的类型对于仿制药。

You're calling AsEnumerable<TResult2> on enumerable which will be of type IQueryable<TResult>. You should call AsEnumerable<TResult> or you can even omit generic parameter and call AsEnumerable()

Also your next select will not work for the same reason - you are providing wrong types for generics.

坦然微笑 2024-11-11 04:06:47

我可能没有抓住重点......但是:

IQueryable 继承自 IEnumerable 所以我认为 AsEnumerable() 在这段代码中是不必要的。

如果您确实需要/想要在执行 Select 之前执行查询,那么您可以使用 ToList() 而不是 AsEnumerable() -这会

更清楚我还想知道您是否在 .cs 文件中包含 using System.Linq - 因为 AsEnumerable()System 中的扩展方法.Linq

I might be missing the point... but:

IQueryable inherits from IEnumerable so I think that AsEnumerable() is unnecessary in this code.

If you really do need/want to execute the query before doing the Select, then you could use ToList() instead of AsEnumerable() - this would be clearer

I'm also wondering if you are including using System.Linq in your .cs file - as AsEnumerable() is an extension method within System.Linq

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文