Tag: linq to entities

Linq处理可变数量的OrderBy

我需要在Linq(to Entity)语句中支持可变数量的Orderby术语。 也就是说,我的函数将接受数据应该在其上排序的属性列表。 属性可以具有升序或降序排序。 处理构造Linq查询的最佳方法是什么? 谢谢!

LINQ to Entities选择具有表达式参数的列

我无法理解如何通过将表达式指定为参数来管理可查询中的列。 Method A(IQueryable query) 在方法A里面我想指定要选择的列,所以我不会马上得到所有列,如下所示: query.Select(x => new { x.OrderNumber, x.Payment, x.Customer }) 如果我直接在方法A中指定它,这很容易,但我想使用参数传递信息。 我尝试使用这样的表达式: Expression<Func> columns 但我无法让它工作,因为我只能指定一列,我称之为方法A,如下所示: MethodA(query, (x) => x.OrderNumber); 我如何指定多个属性?

根据存储的时区修改ASP.NET MVC C#中的日期

我的问题是双重的。 1)我正在编写一个论坛,我无法弄清楚如何为论坛用户存储时区。 他们将能够设置他们的时区,并相应地修改论坛上的所有日期。 我是否必须创建一个带有时区名称和数字的数据库表来调整服务器时间? .NET是否在某处内置了时区支持? 2)一旦我弄清楚如何存储用户的时区,然后将DateTime对象修改到正确的时间,我就需要一种简单的方法将这个修改后的日期传递给MVC中的视图。 例如,我有以下代码: List topics = board.Topics.OrderByDescending(x => x.Replies.Any() ? x.Replies.OrderBy(y => y.PostedDate).Last().PostedDate : x.PostedDate).ToList(); 此topics对象作为视图模型对象的一部分传递给视图。 视图循环遍历Model.Topics并显示主题列表。 问题是我不想在视图中进行时区修改,因为我认为这对视图负有太大的责任。 有没有办法在LINQ查询中修改主题日期? 提前致谢!

将linq中的字符串转换为大数据库中的实体

我在linq中将字符串转换为int到实体但转换为.ToInt32和int.Parse无法转换为sql而且我的数据库是BIG而且无法将所有内容都放到内存中(超过60k记录并且变得更大)我的查询就像是 int myNumber = 1390; var result = from dr in myEntitiy.TableX where (Convert.ToInt32(dr.stringYear) > myNumber) // <== error select dr; 错误说不能翻译转换方法 LINQ to Entities无法识别方法’Int32 ToInt32(System.String)’方法,并且此方法无法转换为存储表达式。 什么解决方案 更新:如果没有办法做到这一点,请让我确定这一点,然后我必须改变数据库中的字段类型,但它会很难:(

如何在运行时创建表达式以在具有entity framework的GroupBy()中使用?

我正在构建一个新的扩展方法,它将动态地能够对来自Entity Framework的查询结果进行分组。 我已经能够使用LinqKit构建动态“where”表达式,但这似乎是一个不同的动物。 新扩展方法的预期用法: var results = entities.GroupBy(“someFieldName”).ToList(); 扩展方法定义: public static IQueryable<IGrouping> GroupBy( this IQueryable source, string fieldName) where TEntity : class, IDataEntity { if (string.IsNullOrEmpty(fieldName)) { return new List<IGrouping>().AsQueryable(); } var parameter = Expression.Parameter(typeof(TEntity), “x”); var fieldXExpression = Expression.Property(parameter, fieldName); var lambda = Expression.Lambda<Func>( Expression.Convert(fieldXExpression, typeof(object)), // throws error when using EF parameter); return […]

使用LINQkit在LINQ to Entities Select中调用Expression

这就是我想要做的: class MyDbContext : DbContext { private static Expression<Func> myExpression1 = x => /* something complicated … */; private static Expression<Func> myExpression2 = x => /* something else complicated … */; public object GetAllData() { return ( from o in MyClassDbSet.AsExpandable() select new { data1 = myExpression1.Invoke(o), // problem 1 data2 = o.Items.Select(myExpression2.Compile()) // problem […]

LINQ在表中使用复合键进行子选择

我在数据库中有一个通过Entity Framework查询访问的设置表。 设置具有复合键:类别,组,名称,目标,已修改。 设置显然也包含非关键字段,如值。 我如何编写一个查询,为我提供相同的(类别,组,名称,目标)中的最新设置? 更具体地说,我想要所有最新的设置实体,包括非关键字段,匹配特定的类别,组,目标组合。 例如:为类别为“数据库”且组为“超时”的所有目标提供所有最新设置。 这可以分两步完成,初始查询返回匹配条件的所有[Category,Group,Name,Target,Modified]键,然后循环查询每个键的设置,但这会产生大量数据库查询,创造开销。 如果我想最小化框架执行的SQL数据库查询的数量,我将如何使用LINQ?

有没有办法在没有数据源的情况下创建LINQ查询作为变量?

前言: 我的核心问题与此非常相似: 如何在不将IQueryable暴露给我的应用程序的其余部分的情况下编写一个干净的存储库? 一直没有答案。 我希望如果我以不同的方式解决问题,并提出一个稍微不同的问题,我可能会得到一个结果。 我将重复这个问题的一些内容,以避免要求读者阅读上下文。 问题: 我正在使用POCO实体和entity framework4.我试图在应用层允许对实体集进行复杂的ad-hoc过滤,同时试图避免将IQueryable暴露在我的存储库边界之外。 这让我有些困难。 我不想在存储库上创建一个带有大量参数的大规模filter方法,例如: IEnumerable GetFilteredCustomers(string nameFilter, string addressFilter, bool isActive, int customerId, …) 这不仅非常麻烦,而且看起来非常难看,特别是如果它主要是一堆零点等等。它也不像我想的那样可维护。 我不想在存储库上创建大量的过滤方法,例如: IEnumerable GetActiveCustomers() IEnumerable GetCustomersByName() 这种方法存在许多问题,包括需要大量增加到n!的方法n! 其中n是可用过滤条件的数量,如果我希望能够以任意方式组合它们。 (即所有名为George的活跃客户)。 也很难维护。 我不想创建操纵IEnumerable可链接方法(Fluent Interface),因为最终需要从数据库中恢复一个巨大的结果集并将其过滤到内存中,这不是一个可扩展的解决方案。 我无法创建一个操作IQueryable的Fluent接口,因为正如我已经说过的,我不希望将IQueryable暴露在存储库之外。 我想避免简单地通过传入一个充满参数而不是大参数列表的对象来重复单个大规模过滤方法,尽管此时这可能是最难看的解决方案。 思路: 最终,我认为一个理想的解决方案是发现一些方法来创建一个不知道源的完整查询,并将其存储为参数。 然后,我可以将其传递到已知源的存储库中,并将查询应用于源并返回结果。 澄清; 与上面提到的简单地创建参数对象相比,我想使用原始LINQ查询,但以某种方式将它们存储在变量中,并稍后将它们应用于数据源。 我怀疑返回类型必须提前知道,但我完全可以定义并事先知道它。 要从另一个角度查看它,请考虑以下事项: IQueryable filteredCustomers = customerRepository.GetAll() .Where(c => c.FirstName == “Dave”) .Where(c => c.IsActive == […]

LINQ to Entities ToString() – 所提议的解决方案都不起作用?

我发布这个更多是因为我想了解更多,因为我的解决方法基本上是避免使用LINQ to Entities! 如果我可以使用它会很好。 所以,如果有人可以开导我.. 我正在使用代码优先entity framework作为我的数据模型开发ASP.Net MVC 3应用程序(我的第一个)。 它将成为一个在线商店,我正在使用’Admin’控制器,作为管理员,您将能够编辑产品等。在添加新产品时,您必须指定一个类别,这意味着下拉列表类别。 我开始时只根据我在这里找到的信息返回ViewBag中的IEnumerable类别集合。 这似乎是处理事情的一种非常好的方式。 但我得到了同样的错误,你会在下面看到。 因此,根据我在线阅读的建议,我创建了一个专门用于创建新产品和编辑现有产品的独立模型。 Categories集合用于在视图中构建下拉列表。 public class ProductModel { public int Id { get; set; } public int CategoryId { get; set; } public string Name { get; set; } public string Description { get; set; } public double Price { get; set; } public […]

linq to Entities中where子句中的扩展方法

在linq to Entities中,我们需要一个类似“sql like”的方法。 我们已经为IQueryable实现了我们自己的扩展方法,因为包含的方法对我们不起作用,因为它不接受像’%a%b%’这样的模式 创建的代码是: private const char WildcardCharacter = ‘%’; public static IQueryable WhereLike(this IQueryable _source, Expression<Func> _valueSelector, string _textSearch) { if (_valueSelector == null) { throw new ArgumentNullException(“valueSelector”); } return _source.Where(BuildLikeExpressionWithWildcards(_valueSelector, _textSearch)); } private static Expression<Func> BuildLikeExpressionWithWildcards(Expression<Func> _valueSelector, string _textToSearch) { var method = GetPatIndexMethod(); var body = Expression.Call(method, Expression.Constant(WildcardCharacter + _textToSearch […]