如何在 EntityFramework 中按动态列名排序? [复制]

     2023-02-24     202

关键词:

【中文标题】如何在 EntityFramework 中按动态列名排序? [复制]【英文标题】:how to order by a dynamic column name in EntityFramework? [duplicate] 【发布时间】:2016-10-29 12:54:33 【问题描述】:

我正在尝试使以下代码正常工作,这对 MSSQL 来说工作正常,但由于我改用 mySql 它不工作

  records.Content = db.areas
                         .Where(x =>   x.Name.Contains(filter)))
                         .OrderBy("dated desc") 
                         .ToList();

我收到错误“无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。”

string colName = "datedD" ; 

如何根据 colName 变量进行排序? `

【问题讨论】:

我猜“字符串版本”是指所谓的“动态 LINQ”(或 System.Linq.Dynamic)。请添加dynamic-linq 标签并相应更新问题。 @Kas 你能检查我的答案吗,因为这似乎是解决这个问题的更好方法;D 试试这个库Entity Framework Plus Library - Linq-Dynamic。你也可以看看我的回答 【参考方案1】:

在.Net Core中,我们可以使用EF.Property方法将属性名指定为字符串:

string sortColumn = "Price";

//IQueryable<Product> q = from p in myDbContext.Products select p;
q = q.OrderBy(p => EF.Property<object>(p, sortColumn));

【讨论】:

这应该是公认的答案 如果您不使用 .Net Core,请查看 @Taher Rahgooy 回答 here【参考方案2】:

试试这个

string filterString = "dated";
bool isAscSorting = false;

Func<dynamic, dynamic> orderingFunction = i =>
                                filterString == "dated" ? i.dated :
                                filterString == "something" ? i.columnx : "";

records.Content = (isAscSorting) ?
                      db.areas
                         .Where(x =>   x.Name.Contains(filter)))
                         .OrderBy(orderingFunction) 
                         .ToList()
                   :
                        db.areas
                         .Where(x =>   x.Name.Contains(filter)))
                         .OrderByDescending(orderingFunction) 
                         .ToList();

【讨论】:

是否可以停止重复此代码? db.areas .Where(x => x.Name.Contains(filter))) 你不能回答这个问题但是你可以使用动态 linq 很复杂 @Kas 你可以将db.areas.Where(x =&gt; x.Name.Contains(filter))) 的结果放入局部变量var query = ... 然后使用query = (isAscSorting) ? query.OrderBy(...) : query.OrderByDescending(...)【参考方案3】:

我使用了 @NEER 和 @S.Serpooshan 的 2 个答案的组合来避免 LINQ 查询

IQueryable<area> filteredItems = db.areas.Where(x =>   x.Name.Contains(filter)));
IQueryable<area> orderedItems;
if (IsAscending)

    orderedItems = filteredItems.OrderBy(item => typeof(area).GetProperty(colName).GetValue(item).ToString());

else

    orderedItems = filteredItems.OrderByDescending(item => typeof(area).GetProperty(colName).GetValue(item).ToString());

不好的是 - 我的代码将项目作为字符串进行比较。我没有时间让它更“类型友好”,但我很确定这是可能的。

【讨论】:

【参考方案4】:

对于我发现的最方便的动态排序方式:

string propertyNameForOrdering = "UserName";

var list = context.Customers.OrderByDescendingDynamic(x => "x." + propertyNameForOrdering).ToList(); // DESC

var list = context.Customers.OrderByDynamic(x => "x." + propertyNameForOrdering).ToList(); // ASC

Entity Framework Plus Library - Linq-Dynamic

即使用于商业用途,该功能也是免费的。

【讨论】:

如何在数据框中按名称删除列

】如何在数据框中按名称删除列【英文标题】:Howtodropcolumnsbynameinadataframe【发布时间】:2011-07-1104:26:45【问题描述】:我有一个大型数据集,我想读取特定列或删除所有其他列。data<-read.dta("file.dta")我选择了我不感兴趣的列:... 查看详情

如何在 Pandas 中按月计算分类列?

】如何在Pandas中按月计算分类列?【英文标题】:HowcanIcountcategoricalcolumnsbymonthinPandas?【发布时间】:2017-10-1821:03:46【问题描述】:我的时间序列数据有一列可以取值A、B或C。我的数据示例如下所示:date,category2017-01-01,A2017-01-15,B2... 查看详情

如何在熊猫中按两列计算唯一记录?

】如何在熊猫中按两列计算唯一记录?【英文标题】:Howtocountuniquerecordsbytwocolumnsinpandas?【发布时间】:2018-04-1122:07:47【问题描述】:我在pandas中有数据框:In[10]:dfOut[10]:col_acol_bcol_ccol_d0FranceParis341UKLondo452USChicago563UKBristol334USParis8... 查看详情

如何在pyspark中按列合并多个数据框?

】如何在pyspark中按列合并多个数据框?【英文标题】:Howtomergeseveraldataframescolumn-wiseinpyspark?【发布时间】:2019-01-0718:49:23【问题描述】:我有大约25个表,每个表有3列(id、date、value),我需要通过加入id和date列从每个表中选择... 查看详情

如何在 Hive 中按列分组使用聚合函数

】如何在Hive中按列分组使用聚合函数【英文标题】:HowtouseaggregatefunctionsinHiveonGroupbycolumns【发布时间】:2012-10-1515:39:09【问题描述】:当我尝试在配置单元中的GroupBy列上使用内置UDF函数或我自己的UDF函数时,我似乎遇到了错误s... 查看详情

仅当其他列值不同时,如何在熊猫数据框中按一列分组

】仅当其他列值不同时,如何在熊猫数据框中按一列分组【英文标题】:Howtogroupbyinpandasdataframebyonecolumnonlyifothercolumnvalueisnotsame【发布时间】:2018-02-1511:07:29【问题描述】:我有一个如下的数据框:dfIDfirstlast0123JoeThomas1456JamesJonas... 查看详情

如何在 Laravel 的嵌套 2 级关系中按列排序?

】如何在Laravel的嵌套2级关系中按列排序?【英文标题】:Howtoorderbycolumninnested2levelrelationshipinLaravel?【发布时间】:2019-08-2905:00:43【问题描述】:我有3个表:reports、fields和report_fields,这是其他2个表之间的枢纽。我需要做的是在... 查看详情

如何在 SQL Server 中按日期列排序的组中对列进行排名

】如何在SQLServer中按日期列排序的组中对列进行排名【英文标题】:HowtorankacolumnwithinagrouporderedbyadatecolumninSQLServer【发布时间】:2021-01-0316:25:42【问题描述】:我有以下示例数据:car_idowner_idservice_date1user22016-01-0200:00:001user22016-03-... 查看详情

如何在 PySpark 中按 groupby 第二列过滤数据帧

】如何在PySpark中按groupby第二列过滤数据帧【英文标题】:HowfilterdataframebygroupbysecondcolumninPySpark【发布时间】:2022-01-0700:47:19【问题描述】:我有一个包含“家庭、人、标志”列的df,并且希望将数据框过滤到至少包含一个标志... 查看详情

如何在熊猫中按值计数对列进行排序

】如何在熊猫中按值计数对列进行排序【英文标题】:Howtosortcolumnbyvaluecountsinpandas【发布时间】:2022-01-1313:27:08【问题描述】:我想在pandas中对数据框进行排序。我想通过按值计数对2列进行排序来做到这一点。一个取决于另一... 查看详情

如何使用 R 在 csv 文件中按列添加数据?

】如何使用R在csv文件中按列添加数据?【英文标题】:HowtoadddatabycolumnsincsvfileusingR?【发布时间】:2012-10-1606:34:42【问题描述】:我有包含在向量中的信息,例如:sequence1<-seq(1:20)sequence2<-seq(21:40)...我想将该数据附加到文件... 查看详情

如何在android中按数值列对listview项目进行排序

】如何在android中按数值列对listview项目进行排序【英文标题】:Howtosortlistviewitemsbynumericvaluescolumninandroid【发布时间】:2020-08-2813:55:25【问题描述】:我有一个列表视图lv,其中包含以下项目:Hyda,25.00Bran,11.75Geda,2.55我想按第二列... 查看详情

pandas 如何使用 groupby 在标签中按日期对列进行分组?

】pandas如何使用groupby在标签中按日期对列进行分组?【英文标题】:pandashowtousegroupbytogroupcolumnsbydateinthelabel?【发布时间】:2017-03-1822:32:45【问题描述】:我有一个10730行×249列的数据框,我有列:Index([\'RegionID\',\'Metro\',\'CountyName... 查看详情

如何在postgres中按不同列删除空间和分组后获得唯一值

】如何在postgres中按不同列删除空间和分组后获得唯一值【英文标题】:Howtogetuniquevalueafterremovingspaceandgroupbysomedifferentcolumninpostgres【发布时间】:2016-05-2106:29:12【问题描述】:我有一张这样的桌子idtypenote1Aabcd1Bcdef1Aabd1Aabcd我想在... 查看详情

如何在pyspark中按字母顺序对嵌套结构的列进行排序?

】如何在pyspark中按字母顺序对嵌套结构的列进行排序?【英文标题】:Howtosortcolumnsofnestedstructsalphabeticallyinpyspark?【发布时间】:2019-09-0611:54:25【问题描述】:我有以下架构的数据。我希望所有的列都应该按字母顺序排序。我想... 查看详情

如何在 Pandas 数据框中按行值对日期时间列进行排序?

】如何在Pandas数据框中按行值对日期时间列进行排序?【英文标题】:HowcanIsortdatetimecolumnsbyrowvalueinaPandasdataframe?【发布时间】:2017-02-0409:43:27【问题描述】:我是Python和Pandas的新手,我提取了一个包含15多个不同日期时间列的数... 查看详情

如何在Python中按十年计算列的平均值

】如何在Python中按十年计算列的平均值【英文标题】:HowtocalculatethemeanofacolumnbydecadeinPython【发布时间】:2017-05-2520:42:30【问题描述】:我不确定如何计算给定特定行的列的平均值。我需要按十年计算Mkt-RF列的平均值,如从193001... 查看详情

如何在 Pandas DataFrame 中按单独的行添加新的列数据

】如何在PandasDataFrame中按单独的行添加新的列数据【英文标题】:HowtoaddnewcolumndatabyindividualrowsinPandasDataFrame【发布时间】:2020-11-0803:29:56【问题描述】:我有一个数据框df。我想添加2个新列0和1并一次将数据添加到这些列中,而... 查看详情