Tag: linq

在LINQ-to-Entities中键入成员支持?

我有一个使用Entity Framework模型的MVC3项目,我在其中标记了这样一个类: public partial class Product { public bool IsShipped { get { /* do stuff */ } } } 我想在LINQ表达式中使用它: db.Products.Where(x => x.IsShipped).Select(…); 但是,我收到以下错误: 用户代码未处理System.NotSupportedException消息= LINQ to Entities中不支持指定的类型成员’IsShipped’。 仅支持初始化程序,实体成员和实体导航属性。 来源= System.Data.Entity的 我用谷歌搜索,但没有找到任何关于这种用法的确切的尝试: public partial class Product { public bool IsShipped() { /* do stuff */ } } db.Products.Where(x => x.IsShipped()).Select(…); 但后来我得到: System.NotSupportedException未由用户代码处理Message = LINQ […]

entity framework按日期选择每个组中的一个

我有一个这样的表(表名:post): +—-+————————–+——-+————+ | id | content | type | date | +—-+————————–+——-+————+ | 0 | Some text | TypeA | 2013-04-01 | | 1 | Some older text | TypeA | 2012-03-01 | | 2 | Some even older texttext | TypeA | 2011-01-01 | | 3 | A dog | TypeB | 2013-04-01 | […]

如何在LINQ语句中重用表达式?

我喜欢为DRY原因重用表达式,但是如何在LINQ语句中重用表达式? 例如 我有 public static class MyExpressions { public static Expression<Func> IsAGoodProduct() { return (p) => p.Quality>3; } } 并且想在LINQ语句中使用它,所以 var goodProds = from p in dataContext.Products where ????? // how do I use IsAGoodProduct here? select p; 当然,我可以使用IQueryableExtension.Where函数,但这会使联接和其他函数对于更复杂的查询更加困难。 这是可能的还是LINQ的限制?

VB.Net和C#之间LINQ语法的差异

只是出于好奇: 在VB.Net中编写了几个项目后,我惊讶地发现C#和VB.NET LINQ用法之间存在一些细微差别。 例如,如果我们想要按多个属性(列)对元素进行分组,我们需要显式创建一个新的匿名类型: var procs = from c in Process.GetProcesses() group c by new {c.BasePriority, c.Id} into d select d; 而在VB.NET中,更直接的语法已经做到了: Dim b = From c In Process.GetProcesses() Group c By c.BasePriority, c.Id Into Group Select Group 因此,人们不需要在这里创建一个带有“new”的类型。 还有什么区别? C#和VB.NET中的LINQ语法有什么好的比较吗?

LINQ To实体包括+ Where方法

我有NxN表,想象一下: 用户(id,…)地址(id,…) UserAddresses包含用户和地址的FK。 据我所知,entity framework用户创建的实体包含UserAddresses的集合。 地址包含UserAddresses的集合,特定的UserAddress包含对User和一个Address的一次重新发送。 现在我想通过linq进行下一个查询。 对于特定用户标识,仅获取已启用标记设置为true的userAddresses。 对于特定用户标识,userAddresses可以包含多个条目,但只为此特定用户设置了一个条目。 我能做的查询是: context.User.Include( x => x.UserAddresses ) .Include( x => x.UserAddresses.Select(y => y.Address) ) .Single( x => x.id == USER_ID ) 但我真正想要的是不为该用户加载所有UserAddresses …只包含启用的那个,设置为TRUE! 有人可以帮我做这个查询吗?

如何使用linQ访问列表中的上一项?

我有列表A包含{1,2,3,4,5,6} List m=new List(); for(int i=1;i<A.count;i++) { int j=A[i]+A[i-1]; m.add(j); } 如何使用LinQ进行相同的操作?

使用reflection在C#中创建动态LINQ语句

如果我有一个像LINQ语句 x = Table.SingleOrDefault(o => o.id == 1).o.name; 如何使用reflection传入变量替换“id”和“name”? 我尝试时,我不断将对象引用设置为对象错误的实例。 我的尝试就是这样的 x = (string)Table.SingleOrDefault(o => (int?)o.GetType().GetProperty(idString) .GetValue(o, null) == 1).GetType().GetField(nameString).GetValue(x); 任何帮助都会很棒。 谢谢。

数据库已存在。 使用CreateDatabase()选择不同的名称

我遇到了一个问题并同时学到了一些东西…… 我从现有的服务器数据库创建了一个DBML。 从DBML我想创建本地数据库(.mdf文件)。 我using DataContext.CreateDatabase(“C:\xxxx.mdf”)创建了数据库。 然后我决定删除它(手动,这显然是一件坏事),因为当我尝试重新创建具有相同名称的数据库时(尽管文件被删除),我得到错误数据库已经存在。 使用CreateDatabase()选择不同的名称 我试过通过注册表,没有运气…我试图搜索整个硬盘驱动器的文件..没有运气。 谷歌搜索后,我发现你删除了一个用CreateDatabase()创建的数据库和DeleteDatabase() ….然后你可以再次重新创建数据库。 问题是,现在我仍然无法重新创建旧数据库,因为系统认为名称已经存在。 有没有办法摆脱旧数据库文件的重组“不存在”

搜索分层列表

我有一个简单的类定义为: public class IndexEntry { public bool HighScore { get; set; } public List SubEntries { get; set; } //Other properties, etc… } 我现在需要搜索List以找到其HighScore属性设置为true的一个项目。 因为它不是一个平面列表,而是一个层次结构,它可能是一个未知数量级别的深度,因为我正在寻找的项目可能包含在任何一个SubEnties列表中,我不能做一个简单的Lambda像这个: var foundHighScore = myList.FirstOrDefault(IE => IE.HighScore == true); 这是我的代码。 我知道这很难看(至少对我而言似乎这样)。 它有效,但在一个甚至远程大型列表上的速度很慢,我确信必须有更好的方法。 private IndexEntry GetHighScoreEntry(IEnumerable entryList) { IndexEntry result = null; IndexEntry recursiveResult = null; foreach (IndexEntry currentEntry in entryList) { […]

通过指定多个条件在通用列表中查找项目

通常我们会找到包含以下代码的通用列表: CartItem Item = Items.Find(c => c.ProductID == ProductID); Item.Quantity = Quantity; Item.Price = Price; 所以上面的代码找到并更新了其他数据,但如果我想通过多个条件找到,那么我该如何编写代码呢? 我想写代码如下: CartItem Item = Items.Find(c => c.ProductID == ProductID and c.ProductName == “ABS001”); 当我们找到通用列表时,请引导我了解多种情况。