Tag: linq to sql

延迟执行 – 字典输出

我有一个Linq查询,返回大约五十万行。 但是,由于我没有调用ToList(),执行仍然是延迟的。 到现在为止还挺好。 我需要一个来自此查询的Dictionary<int, List>输出,它将在Dictionary中返回大约100,000个条目(Distinct整数列值)。 我试过这样的事…… var myDictionary = new Dictionary<int, List>(); var myDictionaryOutput = MyQuery.Select(p => AddOrUpdateDictionary(myDictionary, p)); MyQuery是我的linq查询,AddOrUpdateDictionary是我写的自定义函数。 这会将每个条目投射到一个不是我想要的字典。 我只想要字典输出。 样本数据如下…… 1234 | 2015-08-24 | 2015-08-25 | null | 1234 | null | 2015-08-26 | null | 2345 | null | null | 2015-08-23 | 我希望输出是一个带有两个键的字典 (2行中的2个键来自500,000行的100,000个键), 1234 -> List{2015-08-24, 2015-08-25, 2015-08-26} and […]

Linq2Sql – 使用本地集合作为子查询的一部分 – “不支持使用本地集合的查询”

好, 上次我发布这个(上周),我没有正确描述问题。 我已经创建了这个问题的快速示例。 查询本地集合可以正常使用它作为基本查询的一部分。 我发现的问题是将其与子查询的一部分一起使用。 例如。 如果不向你们提供数据库图表或代码图,这很难描述,但我会尽我所能。 我试图用一个查询执行我的代码到数据库。 我不想打破它并发送多个命令。 这样做有一些好处,包括避免可能出现的问题,我将在此结束时解释。 我正在加入一些有关系的桌子。 属性(DataEventAttributes)表当然描述了主表(DataEvents)中特定行唯一的属性。 当我在没有任何本地集合的情况下查询它时,对我的20 gig数据库工作正常并且速度极快。 但是,如果我将一个本地值集合放入获取结果的子查询的一部分,我将得到“不支持使用本地集合的查询” 这对我来说相当难以在我的代码中重现,所以我会评论它,我可以做你可以按照我正在做的事情。 // gets the initial query and join. We actually only care about the ID in the end, but we use the joined data // to determine if a row needs to be pulled. var initialQuery = from dataEvent in […]

LINQ如何查询值是否在范围列表之间?

假设我在数据库中有一个Person记录,并且该人有一个Age字段。 现在我有一个页面,允许我过滤特定年龄段的人。 例如,我可以选择多个范围选择,例如“0-10”,“11-20”,“31-40”。 所以在这种情况下,我会找回0到20之间的人员列表,以及30到40,但不是21-30。 我已经采用了年龄范围并填充了如下所示的范围列表: class AgeRange { int Min { get; set; } int Max { get; set; } } List ageRanges = GetAgeRanges(); 我使用LINQ to SQL进行数据库访问和查询,但我无法弄清楚如何查询范围。 我想做这样的事情,但当然,这不起作用,因为我无法根据SQL值查询我的本地值: var query = from person in db.People where ageRanges.Where(ages => person.Age >= ages.Min && person.Age <= ages.Max).Any()) select person;

Linq to SQL ForeignKeyReferenceAlreadyHasValueException

我看了几个线程,但我没有看到符合我目的的解决方案(至少我不明白我如何实现它) 我有一个使用Linq to SQL的WCF服务,以便检索,更新和删除SQL Server上的对象。 我创建了一个简单的Relational数据库,它在Customer和Order之间有1对多的关系,Order和OrderDetails之间有1对多的关系, 现在我的订单有一个CustomerID的外键,OrderDetails有一个外国的KW订单ID。 但是OrderDetails还在Products表中包含ProductID的FK。 基本上我现在要做的是使用OrderID修改OrderDetails并使用ProductID添加另一个产品。 虽然我一直收到ForeignKeyReferenceAlreadyHasValueException,但我遇到了问题 我写过这个,我知道这是完全错误的,但当时我并不知道(我完全不熟悉SQL,Linq to SQL等)我无法做到这一点。 OrderDetail item = new OrderDetail(); item.OrderID = orderItem.OrderID; item.ProductID = orderItem.ProductID; item.ProductQuantity = orderItem.ProductQuantity; jacksDB.OrderDetails.InsertOnSubmit(item); jacksDB.SubmitChanges(); 我读到我必须使用像这样的公共代码行来映射实体或类似的东西 var order = jacksDB.Orders.Single(o => o.OrderID == orderItem.OrderID); var orderDetail = order.OrderDetails.Single(o => o.OrderID == orderItem.OrderID); orderDetail.ProductID = orderItem.ProductID; orderDetail.ProductQuantity = orderItem.ProductQuantity; orderDetail.Discount = orderItem.Discount; […]

LINQ:分页技术,使用take和skip但是也需要总记录 – 如何实现这个?

我已经使用skip和take实现了一个分页例程。 它工作得很好,但在调用Take和Skip之前我需要表中的记录总数。 我知道我可以提交2个单独的查询。 得到数数 跳过并采取 但我宁愿不发出2次LINQ调用。 如何在同一查询中返回它(例如使用嵌套的select语句)? 以前,我在存储过程中使用了分页技术。 我使用临时表返回了项目,并将计数传递给输出参数。

已尝试附加或添加非新的实体,可能已从另一个DataContext加载

我遇到了NotSupportedException的问题,我得到:“尝试附加或添加一个非新的实体,可能是从另一个DataContext加载的。” partial class SupplyOfert : Model { public SupplyOfert(int id = 0) { if (id > 0) this.get(id); } public Supplier supplier { get { return this.Supplier; } set { this.Supplier = db.Suppliers.SingleOrDefault(s => s.id == value.id); } } public override bool get(int id) { SupplyOfert so = (SupplyOfert)db.SupplyOferts.SingleOrDefault(s => s.id == id).Copy(this, “Supplies”); this._Supplies […]

在不同类型上映射/转换Linq-to-Sql的问题

也许有人可以帮忙。 我想要映射Linq-Class不同的数据类型。 这是有效的: private System.Nullable _deleted = 1; [Column(Storage = “_deleted”, Name = “deleted”, DbType = “SmallInt”, CanBeNull = true)] public System.Nullable deleted { get { return this._deleted; } set { this._deleted = value; } } 当然可以。 但是当我想为布尔值放置一些逻辑时没有,像这样: private System.Nullable _deleted = 1; [Column(Storage = “_deleted”, Name = “deleted”, DbType = “SmallInt”, CanBeNull = true)] […]

从属性中检索表达式并将其添加到表达式树中

我试图简化这个例子,因为我正在使用的实际代码更复杂。 所以虽然这个例子看起来很傻,但请耐心等待。 假设我正在使用AdventureWorks数据库,我决定在Product表中添加一个名为Blarg的属性,该表返回一个表达式,其中包含我想在几个地方使用的代码: public partial class Product { public Expression<Func> Blarg { get { return product => product.ProductModelID.HasValue ? “Blarg?” : “Blarg!”; } } } 我想要做的是创建一个表达式表达式树,让它从Product.Blarg获取Expression,并按结果分组。 像这样的东西: var productParameter = Expression.Parameter(typeof(Product), “product”); // The Problem var groupExpression = Expression.Lambda<Func>( Expression.Invoke( Expression.Property(productParameter, “Blarg”), productParameter), productParameter); using (AdventureWorksDataContext db = new AdventureWorksDataContext()) { var result = db.Products.GroupBy(groupExpression).ToList(); […]

使用Linq to SQL进行multithreading处理

我正在构建一个应用程序,它要求我使用DataContext的内部线程。 我的应用程序不断抛出InvalidOperationException类似于: There is already an open DataReader associated with this Command which must be closed first ExecuteReader requires an open and available Connection. The connection’s current state is connecting 这些例外是间歇性的。 这是我的代码片段: var repo = new Repository(); var entities = repo.GetAllEntities(); foreach (var entity in entities) { ThreadPool.QueueUserWorkItem( delegate { try { ProcessEntity(entity); } catch […]

如果从本地数据库中提取LINQ-to-SQL类,则不会实现INotifyPropertyChanging和INotifyPropertyChanged

我在LINQ-to-SQL类中修改了我的数据源(通过旧的删除并在方法中向后拖动),并且惊讶地看到生成的类(MyDb.designer.cs)中不再实现INotifyPropertyChanging和INotifyPropertyChanged接口。 各个领域的方法看起来像这样…… [Column(Storage=”_Size”, DbType=”NVarChar(100)”)] public string Size { get { return this._Size; } set { if ((this._Size != value)) { this.OnSizeChanging(value); this.SendPropertyChanging(); this._Size = value; this.SendPropertyChanged(“Size”); this.OnSizeChanged(); } } } 看起来像这样…… [Column(Storage=”_Size”, DbType=”NVarChar(100)”)] public string Size { get { return this._Size; } set { if ((this._Size != value)) { this._Size = value; } } } […]