如何使用FUNC在C#EF的DBQuery语句排序?

问题描述 投票:0回答:1

我要做多部分的种类和要动态做到这一点。

我发现这个问题,但不知道如何在的DBQuery语句中使用func

No generic method 'ThenBy' on type 'System.Linq.Queryable'

如果我能在线程中获取代码的工作将是必杀技。

我所看到的所有例子then语句中使用where,但我需要使用的功能做排序。

我一直在使用IQueryable的,包括那些为排序依据和orderbydescending编写的扩展。问题是thenbythenbydescending使用iorderedqueryable

使用ThenByProperty当我得到的错误是

型的对象 'System.Data.Entity.Infrastructure.DbQuery1[ORMModel.v_Brand]' cannot be converted to type 'System.Linq.IOrderedEnumerable1 [ORMModel.v_Brand]'。

当我使用类似OrderByProperty扩展不要让这样的错误。

什么乱七八糟的,很明显,我不张贴经常在这里。反正我难倒和无能,所以任何提示是非常赞赏。

曾经试图发布代码,但不断收到格式错误,所以放弃了。但是帮助我反正:)

linq func
1个回答
0
投票

如果您使用方法的语法,你会看到FUNC很多时候,例如在WhereGroupByJoin

对于某些输入参数和一个返回值的每一个方法可以如下被转换为Func<...>

MyReturnType DoSomething(ParameterType1 p1, ParameterType2, p2) {...}

Func<ParameterType1, ParameterType2, MyReturnType> myFunc = (x, y) => DoSomething(x, y);

部分Func<ParameterType1, ParameterType2, MyReturnType>指:具有两个输入参数和一个返回值的函数。输入参数是类型ParameterType1ParameterType2的,以该顺序。返回值是MyReturnType的。

您实例使用lambda表达式Func<ParameterType1, ParameterType2, MyReturnType>的对象。在=>在你键入输入参数的声明中,=>后调用这些输入参数的功能。如果你有一个以上的输入参数,你让他们逗号分隔用方括号括。

对于Where你需要一个Func<TSource, bool>。使得具有作为输入的一个源元件,并且作为功能导致一个bool:

Where(x => x.Name == "John Doe")

对于群组加入您需要的类型Func<TOuter,System.Collections.Generic.IEnumerable<TInner>,TResult> resultSelector的resultSelector

因此,这是用作为输入外序列的一个元素,并且内序列的元素的序列的功能。例如,查询教师与学生:

var result = Teachers.GroupJoin(Students,
    teacher => teacher.Id,           // from every Teacher take the Id,
    student => student.TeacherId,    // from every Student take the TeacherId,
    (teacher, students) => new
    {
        Id = teacher.Id,
        Name = teacher.Name,
        Students = students.Select(student => new
        {
            Id = student.Id,
            Name = student.Name,
        })
        .ToList(),
    });

在这里,你看到几个funcs中。 TOuter是老师,TINNER是学生,TKEY的数据类型为int

  • OuterKeySelector:Func<TOuter, TKey>:老师=> teacher.Id
  • InnerKeySelector:Func<TInner, TKey>:学生=> student.TeacherId
  • ResultSelector:Func<Touter, IEnumerable<TInner>, TResult>

所述resultSelector是一个函数,它有一个TOuter(教师),和TINNER的序列(这教师的所有学生),并使用输入参数创建一个对象

(teacher, students) => new {... use teacher and students }

在创建lambda表达式,如果你使用复数指集合(教师,学生)以及英文单,如果你指的集合(学生)的一个元素往往是有帮助的。

使用=>开始定义FUNC。您可以使用=>之前中定义的输入参数=>后确定的结果

© www.soinside.com 2019 - 2024. All rights reserved.