Tag: linq

如何声明Linq表达式变量以使其作为dbParameter处理

我正在尝试针对Entity框架(或其他Linq提供程序)创建动态查询。 让我用一些示例代码解释我的问题。 如果我硬编码表达式: var id = 12345; Expression<Func> myLambda = (s) => s.Id == id; var finalQuery = context.ItemSearch.Where(myLambda); this.Log((finalQuery as ObjectQuery).ToTraceString()); 生成的SQL如下所示: SELECT … FROM ViewItemSearch “Extent1” WHERE “Extent1”.ID = :p__linq__0 一个很好的:p__linq__0 dbParameter。 如果我创建一个表达式: var id = 12345; ParameterExpression param = Expression.Parameter(typeof(ItemSearch), “s”); Expression prop = Expression.Property(param, “Id”); Expression val = Expression.Constant(id); Expression searchExpr […]

Linq to XML将元素添加到特定子树

我的XML: 我想添加新的Account元素,让我们说ID为2的客户。我知道如何添加行,我不知道如何指定客户(我在哪里写客户的ID?) 我的LINQ to XML代码: XDocument document = XDocument.Load(“database.xml”); document.Element(“Bank”).Element(“Customer”).Element(“Accounts”).Add ( new XElement ( “Account”, new XAttribute(“id”, “variable”) ) ); document.Save(“database.xml”); 谢谢您的帮助。 XML不是我的好朋友:(

ToArray()是否针对数组进行了优化?

ReSharper建议将IEnumerable枚举到列表或数组中,因为我有“可能的多个IEnumerable枚举” 。 建议的自动代码重新分解有一些内置的优化,以便在调用ToArray()之前查看IEnumerable是否已经是一个数组。 var list = source as T[] ?? source.ToArray(); 这种优化是不是已经内置了原始的LINQ方法? 如果没有,那么不这样做的动机是什么?

linq2sql中的简单Eager / Lazy加载示例

有没有人在linq2sql中有一个简单的代码示例来演示Eager Loading和Lazy Loading之间的区别?

等待异步谓词列表,但是先丢弃

想象一下以下课程: public class Checker { public async Task Check() { … } } 现在,想象一下这个类的实例列表: IEnumerable checkers = … 现在我想控制每个实例都将返回true : checkers.All(c => c.Check()); 现在,这将无法编译,因为Check()返回一个Task而不是bool 。 所以我的问题是:我怎样才能最好地列举检查器列表? 如果检查器返回false我怎样才能快速枚举枚举? (我认为All( )已经存在的东西)

linq匿名方法中的局部变量范围(闭包)

Linq Query中声明的局部变量的范围是什么。 我正在编写以下代码 static void Evaluate() { var listNumbers = Enumerable.Range(1, 10).Select(i => i); int i = 10; } 编译器标记错误在行int i = 10,说明 A local variable named ‘i’ cannot be declared in this scope because it would give a different meaning to ‘i’, which is already used in a ‘child’ scope to denote something else […]

选择int数组中ID的实体 – WCF数据服务,LINQ

我想使用LINQ和Data Services返回一组实体,这些实体具有包含在ID列表或数组中的ID和ID。 我知道如何使用LinqToEF,但我不知道如何使用Data Services或使用OData查询约定。 我的想法是我会做类似的事情: int[] intArray = {321456, 321355, 218994, 189232}; var query = (from data in context.Entity where intArray.contains(data.ID) select data); 有没有办法使用Data Services / OData? 我知道我可能会通过服务操作破解它,但我宁愿不这样做。 干杯。

Linq表达式如何确定平等?

我正在考虑使用Linq Expression作为字典中的键。 但是,我担心我会得到奇怪的结果,因为我不知道Linq表达式如何确定Equality。 派生自Expression的类是否比较值相等或引用相等? 或者换句话说, Expression<Func> first = () => new object(); Expression<Func> second = ()=>new object(); bool AreTheyEqual = first == second;

类型推断在对可空和非可空int的’join’调用中失败

在我的Linq中,我试图将内部联接设置为可以为空的字段。 员工和部门有关系,部门可能有EmployeeID或可能有null。 那么什么是我的连接,如果我只想要满足内连接的记录(没有结果为null EmployeeIDs): var result = from emp in employees join dept in departments on new { Source = emp.EmployeeID } equals new { Source = dept.EmployeeID }; 我得到一个例外: join子句中某个表达式的类型不正确。 在“加入”调用中类型推断失败。 谢谢

为什么在使用foreach时不执行此LINQ查询?

在LINQ语句中创建新对象时,例如: var list = new List() { “a”, “b”, “c” }; var created = from i in list select new A(); A级看起来像这样: class A { public string Label; } 然后使用foreach循环修改A中的属性: foreach (var c in created) { c.Label = “Set”; } 为什么在访问IEnumerable的对象后未设置值。 例如,以下断言失败: Assert.AreEqual(“Set”, created.ElementAt(2).Label); 我想知道为什么会这样。 我希望foreach语句执行查询,并触发对象的创建。 MSDN文档声明: “查询的执行被推迟,直到在foreach或For Each循环中迭代查询变量” 。 我用.NET 4.5和Mono 3.2.0重现了这种行为。 在访问创建的对象之前在IEnumerable上调用ToList会使这个问题消失。