我想在我的查询中使用多个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.
请帮我..
我希望能够OrderBy使用 lambda 表达式进行查询,以便获得带有 TOP(n) 关键字的 SQL 查询(性能大幅提升)。
如果我指定的话我就能做到这一点...
PaginatedList = query.OrderBy(x => x.QuoteID).Skip(() => skipValue).Take(() => pageSize)
Run Code Online (Sandbox Code Playgroud)
但因为我希望 orderBy 字段通过 UI 选择名称而动态化,所以我想做这样的事情:
var propertyInfo = typeof(Data.Quote).GetProperty(sortName);
Expression<Func<Data.Quote, object>> orderField = x => propertyInfo.GetValue(x, null);
PaginatedList = query.OrderBy(orderField).Skip(() => skipValue).Take(() => pageSize)
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
“LINQ to Entities 无法识别‘System.Object GetValue(System.Object)’方法,并且该方法无法转换为存储表达式。”
我试过这不是类型Expression<Func<T, object>>
var propertyInfo = typeof(Data.Quote).GetProperty(sortName);
Func<Data.Quote, object> orderField = x => propertyInfo.GetValue(x, null);
PaginatedList = query.OrderBy(x => orderField).Skip(() => skipValue).Take(() => pageSize)
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
“无法创建 [...] 类型的常量值。在此上下文中仅支持原始类型或枚举类型”
我确信有一种方法可以实现这一目标,但目前不确定如何实现。
我从我的请求中收到此参数:
sort=homeCountry
Run Code Online (Sandbox Code Playgroud)
我需要按照发送到sort参数的任何列进行排序,因此我创建了一个类似的方法:
string sort = "homeCountry";
Func<PaymentRateTrip, string> orderBy = (
x => sort == "homeCountry" ? x.HomeCountry :
sort == "hostCountry" ? x.HostCountry :
sort == "homeLocation" ? x.HomeLocation :
sort == "hostLocation" ? x.HostLocation :
x.HomeLocation
);
Run Code Online (Sandbox Code Playgroud)
这工作正常.
但是,上面的列都是字符串.但是,我还需要添加十进制列,如下所示:
string sort = "homeCountry";
Func<PaymentRateTrip, string> orderBy = (
x => sort == "homeCountry" ? x.HomeCountry :
sort == "hostCountry" ? x.HostCountry :
sort == "homeLocation" ? x.HomeLocation :
sort == "hostLocation" ? x.HostLocation :
sort …Run Code Online (Sandbox Code Playgroud) 我正在使用LINQ to Objects聚合:
var summary = from esc in objs
where esc.time.Month == month && esc.time.Year == year
group esc by esc.rlf_id into g
select new {
ID = g.Key,
Total = g.Count(),
Preventable = g.Where(a => a.preventable).Count()
};
Run Code Online (Sandbox Code Playgroud)
我的查询按预期工作,但我也想按匿名类型中的任意字段对查询进行排序.我找到了LINQ:按匿名类型排序,但是它在VB.NET中并且需要强烈指定要排序的字段.我可以用这个伪代码概念化我想要的东西:
query = get all esc in obj
aggregate into anonymous type with key ID
ID = g.Key, Total = g.Count, Preventable = g.Count of preventable
orderby inputField[0], (optional thenby inputField[1], ..., thenby inputField[n])
Run Code Online (Sandbox Code Playgroud)
我如何完成:
我目前正在使用动态 LINQ(原始 codeplex 链接)库来实现动态搜索功能。我有一个要求,我需要OrderBy一个DateTime?只考虑日期而不是时间的字段。我正在使用EntityFramework.
这是示例实体。
public class SampleEntity
{
public DateTime? DateCreated { get; set; }
public bool Flag { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是查询数据库的代码。
var orderByString = "DateCreated.Value.Date asc, Flag"; //This is a dynamic string
var query = _context.Set<SampleEntity>().OrderBy(orderByString);
Run Code Online (Sandbox Code Playgroud)
这个表达式 ("DateCreated.Value.Date") 被解析没有问题,System.Linq.Dynamic但它抛出以下错误(这是可以理解的),因为它不受 LINQ to Entities 支持。请记住,这必须在 IQueryable 上工作(我不能使用这篇文章中的答案),因为我需要在服务器端进行排序。
LINQ to Entities 不支持指定的类型成员“日期”。仅支持初始值设定项、实体成员和实体导航属性。
解决的办法是使用DbFunctions.TruncateTime()如表示在这个答案等。但是,这不会与System.Linq.Dynamic
关于如何解决这个问题的任何想法。可能的解决方案是将另一列添加到只有日期部分的数据库DateCreated并查询该列。但是,我宁愿不这样做,而是在寻找解决此问题的其他方法。另一种方法是动态生成 lambda 表达式并返回 DbFunctions.TruncateTime,然后对 DB …
c# linq linq-to-entities entity-framework entity-framework-6
我希望通过在代表给定类型的属性成员访问的代码中构建表达式来动态使用 CsvHelper。
我试图将这些表达式传递给的方法具有以下签名:
public virtual CsvPropertyMap<TClass, TProperty> Map<TProperty>( Expression<Func<TClass, TProperty>> expression )
{
//
}
Run Code Online (Sandbox Code Playgroud)
因此,对于要映射的任何给定类型,您通常会调用它,如下所示(对于具有名为“stringProperty”的属性的类型):
mapper.Map(x => x.StringProperty);
Run Code Online (Sandbox Code Playgroud)
传入一个 lambda 表达式,该 lambda 表达式在内部转换为 Expression<Func<T, object>>
我尝试使用表达式在代码中创建此表达式。在编译时它一切正常(因为它返回一个Expression<Func<TModel, object>>),但在运行时我得到一个异常“不是成员访问”。这是采用表示我要映射的属性的 PropertyInfo 对象的代码:
private Expression<Func<TModel, object>> CreateGetterExpression( PropertyInfo propertyInfo )
{
var getter = propertyInfo.GetGetMethod();
Expression<Func<TModel, object>> expression = m => getter.Invoke( m, new object[] { } );
return expression;
}
Run Code Online (Sandbox Code Playgroud)
基本上,如何在代码中正确构建该表达式?
我有两个
List<string>
l1 = {"one", "two","three","four"}
l2 = {"one", "three"}
Run Code Online (Sandbox Code Playgroud)
我想知道l2的所有内容是否都在l1中作为bool?
c# ×6
linq ×6
.net ×1
asp.net ×1
c#-3.0 ×1
expression ×1
func ×1
lambda ×1
linq-to-sql ×1
reflection ×1
sorting ×1