Tag: linq to entities

为什么这个LINQ join语句不起作用?

我有这个LINQ查询: // types… LinkedList itemScores = new LinkedList(); var result = from i in _ctx.Items join s in itemScores on i.Id equals s._id orderby s._score descending select new ItemSearchResult(i, s._score); // this fails: return result.ToList(); 哪个生成此错误: 无法创建类型为’System.Collections.Generic.IEnumerable`1’的常量值。 在此上下文中仅支持基本类型(例如Int32,String和Guid’)。 [编辑]这是WeightedItem的代码: public class WeightedItem { public int _id; public decimal? _score; public WeightedItem(int id, decimal? score) { […]

关于收集的哪个条款

我正在使用Julie Lerman的DbContext书中的BAGA代码。 我想在LINQ中重新创建以下SQL查询,并将结果放在List集合中,并且遇到问题。 http://learnentityframework.com/downloads/ SELECT * FROM baga.Locations d LEFT JOIN Lodgings l ON d.LocationID = l.destination_id WHERE d.Country = ‘usa’ AND (l.MilesFromNearestAirport > 5 or l.MilesFromNearestAirport is null) 所以,用英语,获取在美国的所有地点(目的地),并包括所有相关的住宿,其中MilesFromNearestAirport> 5 语法不能编译,但我希望有类似于下面的内容 var dests = context.Destinations .Where(d => d.Country == “USA” && d.Lodgings.Where(l => l.MilesFromNearestAirport > 5)) .Select(d => d) .ToList(); 有任何想法吗?

entity framework中的LINQ预测的可重用计算(代码优先)

我的域模型有很多复杂的财务数据,这是对各种实体的多个属性进行相当复杂计算的结果。 我通常将这些作为[NotMapped]属性包含在相应的域模型中(我知道,我知道 – 关于将业务逻辑放在您的实体中存在很多争议 – 务实,它只适用于AutoMapper并且允许我定义可重用的DataAnnotations – a讨论这是好还是不是我的问题。 只要我想实现整个实体(以及任何其他依赖实体,通过.Include() LINQ调用或在实现后通过其他查询),然后在查询后将这些属性映射到视图模型,这样就可以正常工作。 当尝试通过投影到视图模型而不是实现整个实体来优化有问题的查询时,会出现问题。 考虑以下域模型(显然简化): public class Customer { public virtual ICollection Holdings { get; private set; } [NotMapped] public decimal AccountValue { get { return Holdings.Sum(x => x.Value); } } } public class Holding { public virtual Stock Stock { get; set; } public int Quantity { […]

LINQ to Entities不支持错误,方法

为什么我收到此错误: LINQ to Entities不支持“Single”方法。 请考虑使用“First”方法。 public ActionResult Details(int id) Line 27: { var result = (from d in _db.MovieSet Line 29: where d.Id == id Line 30: select d).Single(); // // } 代码编译安全,但只有在调用相应部分时才会中断。 我是LINQ的新手,因此不知道哪些方法适用于LINQtoSQL或LINQtoEntities。 这意味着更多错误! 我们不记得所有这些方法。 我的问题是,如果适用于某些类型/场景的方法存在局限性,为什么它们出现在Intellisense中? 编辑:任何解决方法/技术有助于了解是否支持?

Linq to Entities Skip()和Take()

我正在开发一个ASP.NET应用程序,我正在创建一个LINQ查询,它将从db中选择分页记录。 在用户界面上我有一个列表框,用户可以在其中选择多个选项。 我想知道: 如何增加Skip(),Take()参数以查看下一个结果? 如何使用“IN”关键字,以便用户从列表框中选择多个选项时,查询是否可以检查所有值? 我的查询如下所示: var searchResults = context.data_vault.Where(d => d.STATE == lstStates.SelectedItem.Text).OrderBy(d= > d.dv_id).Take(10).Skip(2); GridView1.DataSource = searchResults; GridView1.DataBind();

LINQ不能使用string.contains?

这是我的代码: string queryString = “Marco”.ToLower(); utenti = db.User.Where(p => queryString.Contains(p.Nickname.ToLower()) || queryString.Contains(p.Nome.ToLower()) || queryString.Contains(p.Cognome.ToLower())).ToList(); 但我得到: String.Contains方法仅支持可在客户端上计算的参数。 为什么? 我不能用.Contains() ?

如何检查ObjectQuery 表达式树中是否存在OrderBy

我正在使用T4为LINQ to Entities实体生成存储库。 存储库包含(除其他外)适合于分页的List方法。 支持和不支持的方法的文档没有提到它,但你无法“调用” Skip无序的IQueryable 。 它会引发以下exception: System.NotSupportedException:方法’Skip’仅支持LINQ to Entities中的排序输入。 必须在方法’Skip’之前调用’OrderBy’方法。 我通过允许通过部分方法定义默认排序来解决它。 但是我在检查表达式树是否确实包含OrderBy遇到了问题。 我已经将问题减少到尽可能少的代码: public partial class Repository { partial void ProvideDefaultSorting(ref IQueryable currentQuery); public IQueryable List(int startIndex, int count) { IQueryable query = List(); ProvideDefaultSorting(ref query); if (!IsSorted(query)) { query = query.OrderBy(c => c.CategoryID); } return query.Skip(startIndex).Take(count); } public IQueryable List(string sortExpression, int […]

如何在entity framework对象的LINQ to Entities中使用谓词

我在我的数据访问层中使用LINQ to Entities for Entity Framework对象。 我的目标是尽可能多地从数据库中过滤,而不将过滤逻辑应用于内存中的结果。 为此,业务逻辑层将谓词传递给数据访问层。 我的意思是 Func 所以,如果我直接使用这个谓词,就像 public IQueryable GetAllMatchedEntities(Func isMatched) { return qry = _Context.MyEntities.Where(x => isMatched(x)); } 我得到了例外 [System.NotSupportedException] — {“LINQ to Entities中不支持LINQ表达式节点类型’Invoke’。”} 该问题的解决方案建议使用LINQKit库中的AsExpandable()方法。 但是,再次使用 public IQueryable GetAllMatchedEntities(Func isMatched) { return qry = _Context.MyEntities.AsExpandable().Where(x => isMatched(x)); } 我得到了例外 无法将类型为“System.Linq.Expressions.FieldExpression”的对象强制转换为“System.Linq.Expressions.LambdaExpression” 是否有方法在LINQ to Entities查询entity framework对象中使用谓词,以便将其正确转换为SQL语句。 谢谢。

linq2entities的IQueryable扩展方法

我正在尝试实现一个与linq2entities一起使用的扩展方法。 我最初假设如果我的扩展方法接受并返回了一个IQueryable,并且只要我的表达式只使用了受支持的方法,那么它就能正常工作。 我有很多麻烦,所以作为最后的手段,我复制了一个我知道工作的现有.NET扩展方法(FirstOrDefault)并简单地重命名它。 看起来它会根据方法返回的表达式来评估“无法转换为商店表达式”validation,而不是方法本身的名称。 var prs = db.People.Where(p => p.PersonKey == 15).Select(p => new { id = p.PersonKey, name1 = p.PersonHistories.AsQueryable().AsOf().Name } ).ToList(); 我的扩展方法,它只是我重命名的FirstOrDefault的副本: public static TSource AsOf(this IQueryable source) { return source.Provider.Execute(Expression.Call(null, ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(new Type[] { typeof(TSource) }), new Expression[] { source.Expression })); } 错误: LINQ to Entities does not recognize the method ‘Models.PersonHistory AsOf[PersonHistory](System.Linq.IQueryable`1[Models.PersonHistory])’ […]

如何判断IEnumerable 是否会延迟执行?

我总是假设如果我在LINQ对象的上下文中使用Select(x=> …) ,那么新的集合将立即创建并保持静态。 我不太清楚为什么我这么做,这是一个非常糟糕的假设,但我做到了。 我经常在其他地方使用.ToList() ,但在这种情况下通常不会。 此代码演示即使是简单的“选择”也会延迟执行: var random = new Random(); var animals = new[] { “cat”, “dog”, “mouse” }; var randomNumberOfAnimals = animals.Select(x => Math.Floor(random.NextDouble() * 100) + ” ” + x + “s”); foreach (var i in randomNumberOfAnimals) { testContextInstance.WriteLine(“There are ” + i); } foreach (var i in randomNumberOfAnimals) { testContextInstance.WriteLine(“And […]