相关疑难解决方法(0)

如何动态构建()=> x.prop lambda表达式?

我的代码就像

DepartmentPaperConsumption dto = null;
Run Code Online (Sandbox Code Playgroud)

然后我有NHibernate QueryOver结果,我想订购它

result.OrderByAlias(() => dto.TotalColorCopys);
Run Code Online (Sandbox Code Playgroud)

但我希望能够dto用字符串动态指定任何属性.我尝试使用动态LINQ,但似乎我无法得到它.我也试过从头开始构建LambdaExpression - 也没有运气.我将不胜感激任何帮助.

c# linq nhibernate lambda queryover

4
推荐指数
1
解决办法
2万
查看次数

List <T> orderby的动态链接

我正在编写一个列表排序扩展方法.我的输入是列表和带有属性名称和排序方向的字符串.这个字符串可以有多个属性,如:"Name ASC,Date DESC"等.

我已经实现了字符串解析并使用了反射来从字符串中获取属性本身,但我现在所困扰的是如何动态链接orderby方法.

像: _list.orderBy(x=>x.prop1).thenBy(x=>x.prop2)等等

有没有办法动态构建它?

c# linq generics

4
推荐指数
1
解决办法
4686
查看次数

在类的字段中动态搜索(每次都由其他字段)

在我的'Person'课程中,我有一些字段,如'firstname','lastname','nickname'等等.

我想编写动态搜索的代码,有时候是'firstname',有时是'nickname'字段.

以常规方式,代码将是:

If(SearchBy == "firstname") 
{
     Person result = ListOfPerson.Where(p => p.firstname== "exp").FirstOrDefault();
}
else If(SearchBy == "nickname") 
{
      Person result = ListOfPerson.Where(p => p.nickname== "exp").FirstOrDefault();
}
Run Code Online (Sandbox Code Playgroud)

但是我想写的代码应该是这样的:(每次保存if)

Object someVariable  = "firstname";

Person result = ListOfPerson.Where(p => p.someVariable == "exp").FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

任何人都可以知道它是否可能?

.net c# linq

3
推荐指数
1
解决办法
472
查看次数

Linq查询的Lambda表达式在变量中

如何将要在linq查询中使用的lambdaexpression定义为变量?

例如,当按列表项的不同属性对通用列表进行排序时:

 IList<SampleClass> list = new List<SampleClass>();

 // Populate list
 ...

 list.OrderBy(sampleclass => sampleclass.property1);
 list.OrderBy(sampleclass => sampleclass.property2);
Run Code Online (Sandbox Code Playgroud)

我想在一个变量中定义lambda表达式(sampleclass => sampleclass.property1)并调用:

// ??? define expression in a variable ???
Expression expression = sampleclass => sampleclass.property1;

// Sort list by variable expression
list.OrderBy(expression);
Run Code Online (Sandbox Code Playgroud)

在此先感谢Tobi

c# linq sorting lambda expression

3
推荐指数
1
解决办法
2522
查看次数

C#排序/比较项目

我有一个类(Patch),我想要排序,所以我实现了IComparer.

但是,它需要根据用户的需要进行排序,例如: - key1,key2,key3 - key1,key3,key2

对于每个密钥比较,我写了一个IComparer类,但是,我想知道如何实现它的连接.即排序时我只能传递一个IComparer实例.

或者我应该为每种完整排序创建一个IComparer类,即IComparerKey1Key2Key3,IComparerKey1Key3Key2等?

c# sorting wpf icomparer

3
推荐指数
2
解决办法
369
查看次数

有没有办法通过具有不同排序量的 IQueryable 进行排序

例如,我想尝试这样的事情。排序部分可能没有、1 个或多个按不同顺序排序的列。但我无法使用该ThenBy方法,因为它仅在OrderBy. 下面的代码将不断将顺序重置为排序列表中的最后一项。我也不想更改方法签名。非常感谢您的帮助,谢谢。

public IQueryable<Person> FilterList(string forename, List<Sorting> sorting)
{
    IQueryable<Person> query = dc.Set<Person>();

    if(!string.IsNullOrEmpty(forename)){
        query = query.Where(w=>w.Forename.Contains(forename));

    foreach(var sort in sorting)
    {
        switch(sort.By)
        {
            case "asc":
               switch(sort.Sort)
               {
                   case "forename":
                       query = query.OrderBy(o=>o.Forename);
                       break;

                   case "surname":
                       query = query.OrderBy(o=>o.Surname);
                       break;
               }
               break;

            case "desc":
               switch(sort.Sort)
               {
                   case "forename":
                       query = query.OrderByDescending(o=>o.Forename);
                       break;

                   case "surname":
                       query = query.OrderByDescending(o=>o.Surname);
                       break;
               }
               break;
        }
    }

    return query;
}

public class Sorting
{
    public string Sort{get;set;}
    public string By{get;set;} …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework sql-order-by

3
推荐指数
1
解决办法
7392
查看次数

Linq to Sql - 存储库模式 - 动态OrderBy

好的,我找到了这个,这将允许我这样做:

public IList<Item> GetItems(string orderbyColumn)
{
    return _repository.GetItems().OrderBy(orderByColumn).ToList();
}
Run Code Online (Sandbox Code Playgroud)

这是进行"动态"排序的最佳方式吗?我希望能够将列名作为字符串(和排序方向)传递给我的服务,并让它以正确的方式排序.

linq linq-to-sql

2
推荐指数
1
解决办法
3117
查看次数

动态linq表达式查询,得到问题

我试着根据要求在查询中加入4个表.因为我想在where子句中动态添加条件,所以我现在可以为2表查询执行此操作.但这4个表连接在这里是复杂的连接.为了扩展我正在使用以下代码添加动态where子句的功能:

public static class Extensions
    {
        public static IQueryable<T> AddEqualityCondition<T, V>(this IQueryable<T> queryable,
          string propertyName, V propertyValue)
        {
            ParameterExpression pe = Expression.Parameter(typeof(T), "p");

   IQueryable<T> x = queryable.Where<T>(Expression.Lambda<Func<T, bool>>(Expression.Equal(Expression.Property(pe, typeof(T).GetProperty(propertyName)), Expression.Constant(propertyValue, typeof(V)), false, typeof(T).GetMethod("op_Equality")), new ParameterExpression[] { pe }));
            return (x);
        }
    }
Run Code Online (Sandbox Code Playgroud)

//我的代码添加条件:

Query is:
 var agrs = (from agr in _dbContext.Agreements
                                 join amdv in _dbContext.AgreementMetaDataValues on agr.AgreementID equals amdv.AgreementID 
                                 join emd in _dbContext.EntityMetadatas on amdv.AttributeId equals emd.AttributeId
                                 join et in _dbContext.Entities on agr.EntityID equals et.EntityId
                                 select new  agr, amdv,emd …
Run Code Online (Sandbox Code Playgroud)

c# linq expression entity-framework-4

2
推荐指数
1
解决办法
975
查看次数

LINQ - OrderBy的动态表达式

我有一点问题,我会试着详细解释一下.

在我的系统上,我有一个使用EF 4.1的通用存储库.一切都很棒,但我在某种情况下遇到问题我需要通过一些查询来做动态排序.

我通过参数接收一个表示我班级字段的"字符串"来执行orderBy(如"id"或"description")

部分代码:

        public class SomeClass
        {
            public int id { get; set; }
            public string description { get; set; }
        }

        // First we define the parameter that we are going to use
        // in our OrderBy clause. This is the same as "(parameter =>"
        // in the example above.
        var param = Expression.Parameter(typeof(SomeClass), "parameter");

        // Now we'll make our lambda function that returns the
        // request.SortingName property by it's name.
        var expression = Expression.Lambda<Func<SomeClass, int>>(Expression.Property(param, request.SortingName), …
Run Code Online (Sandbox Code Playgroud)

linq asp.net-mvc entity-framework

2
推荐指数
1
解决办法
5527
查看次数

如何在LINQ中使用多个订单?

我想在我的查询中使用多个order,我使用LINQ.i是LINQ的新手,我已经尝试了stackoverflow上给出的示例.但我不知道为什么这些不适合我,我相信我错了.以下是我的情况.我有一个使用LINQ创建的项目.我没有设置列顺序的任务.实际上我的任务是什么,现在有一个列创建日期.现在我想使用Createddate以及sortOrder列进行排序.Below是用于它的代码:页面加载方法中的代码

ViewState["SortDirection"] = "desc";
ViewState["SortColumn"] = "createddate";
BindAllTopics(ViewState["SortDirection"].ToString(), ViewState["SortColumn"].ToString());
Run Code Online (Sandbox Code Playgroud)

我的BindAllTopic方法如下:

 protected void BindAllTopics(string SortType, string SortColumn)
{
    var LstTopics = (from topic in Dbobj.T_topic select topic).ToList();
    if (LstTopics.Count() > 0)
    {
        if (SortType == "ASC")
        {
            LstTopics = LstTopics.OrderBy(q => q.Name).ToList();
        }
        else
        {
            LstTopics = LstTopics.OrderByDescending(q => q.Name).ThenBy(q => q.SortOrder).ToList();
        }
        GrdTopics.DataSource = LstTopics.ToList();
        GrdTopics.PageSize = 25;
        GrdTopics.DataBind();

    }
    else
    {
        GrdTopics.DataSource = null;
        GrdTopics.DataBind();
        lblMsg.DisplayMessage(StatusMessages.InfoMessage, "No Topics Found.");
    }
}
Run Code Online (Sandbox Code Playgroud)

我想先按排序顺序排序,它是int类型,然后是Createddate.

请帮我..

linq asp.net sorting

2
推荐指数
1
解决办法
4162
查看次数