Tag: linq

如何使用LINQ来select具有最小或最大属性值的对象

我有一个可空的DateOfBirth属性的Person对象。 有没有办法使用LINQ来查询最早/最小的DateOfBirth值的Person对象的列表。 这是我开始的: var firstBornDate = People.Min(p => p.DateOfBirth.GetValueOrDefault(DateTime.MaxValue)); Null DateOfBirth值设置为DateTime.MaxValue,以便将它们排除Min考虑(假设至less有一个具有指定的DOB)。 但所有这一切对我来说是设置firstBornDate为DateTime值。 我想得到的是与之相匹配的Person对象。 我是否需要编写第二个查询,如下所示: var firstBorn = People.Single(p=> (p.DateOfBirth ?? DateTime.MaxValue) == firstBornDate); 还是有一个更瘦的方法呢?

返回IEnumerable <T>与IQueryable <T>

返回IQueryable<T>与IEnumerable<T>什么区别? IQueryable<Customer> custs = from c in db.Customers where c.City == "<City>" select c; IEnumerable<Customer> custs = from c in db.Customers where c.City == "<City>" select c; 这两个都是延期执行,什么时候应该比另一个更受欢迎?

在LINQ中分组

假设我们有一个类 class Person { internal int PersonID; internal string car ; } 现在我有这个类的列表: List<Person> persons; 现在这个列表可以有多个具有相同PersonID的实例,例如: persons[0] = new Person { PersonID = 1, car = "Ferrari" }; persons[1] = new Person { PersonID = 1, car = "BMW" }; persons[2] = new Person { PersonID = 2, car = "Audi" }; 有没有一种方法可以通过personID进行分组并获得他拥有的所有赛车的列表? 例如,预期的结果是 class […]

LINQ读取XML

我有这个XML文件 <root> <level1 name="A"> <level2 name="A1" /> <level2 name="A2" /> </level1> <level1 name="B"> <level2 name="B1" /> <level2 name="B2" /> </level1> <level1 name="C" /> </root> 有人可以给我一个C#代码使用LINQ,最简单的方法来打印这个结果: (注意额外的空间,如果它是一个level2节点) A A1 A2 B B1 B2 C 目前我得到了这个代码 XDocument xdoc = XDocument.Load("data.xml")); var lv1s = from lv1 in xdoc.Descendants("level1") select lv1.Attribute("name").Value; foreach (var lv1 in lv1s) { result.AppendLine(lv1); var […]

使用LINQ可以透视数据吗?

我是新来的LINQ,但我想知道是否有可能使用LINQ来从以下布局的数据透视: CustID | OrderDate | Qty 1 | 1/1/2008 | 100 2 | 1/2/2008 | 200 1 | 2/2/2008 | 350 2 | 2/28/2008 | 221 1 | 3/12/2008 | 250 2 | 3/15/2008 | 2150 成这样的东西: CustID | Jan- 2008 | Feb- 2008 | Mar – 2008 | 1 | 100 | 350 | […]

对于IEnumerable <T>的foreach相当于LINQ

我想在LINQ中做以下的等价物,但我不知道如何: IEnumerable<Item> items = GetItems(); items.ForEach(i => i.DoStuff()); 什么是真正的语法?

从lambdaexpression式中检索属性名称

有一个更好的方式来获得通过lambdaexpression式传入时的属性名称? 这是我目前有。 例如。 GetSortingInfo<User>(u => u.UserId); 只有当属性是一个string的时候,它才会将其作为一个元素来expression。 因为不是所有的属性都是string,我不得不使用对象,但它会返回一个一元expression式。 public static RouteValueDictionary GetInfo<T>(this HtmlHelper html, Expression<Func<T, object>> action) where T : class { var expression = GetMemberInfo(action); string name = expression.Member.Name; return GetInfo(html, name); } private static MemberExpression GetMemberInfo(Expression method) { LambdaExpression lambda = method as LambdaExpression; if (lambda == null) throw new ArgumentNullException("method"); MemberExpression memberExpr […]

LEFT OUTER JOIN LINQ

如何在不使用join-on-equals-into子句的情况下将C#LINQ中的左外连接执行到对象? 有什么方法可以用where子句做到这一点? 正确的问题:内部连接很容易,我有这样的解决scheme List<JoinPair> innerFinal = (from l in lefts from r in rights where l.Key == r.Key select new JoinPair { LeftId = l.Id, RightId = r.Id}) 但是对于左外连接,我需要一个解决scheme。 我的是这样的,但它不工作 List< JoinPair> leftFinal = (from l in lefts from r in rights select new JoinPair { LeftId = l.Id, RightId = ((l.Key==r.Key) ? r.Id : […]

用LINQ将列表拆分成子列表

有没有什么办法可以将List<SomeObject>分隔成几个单独的SomeObject列表,使用item索引作为每个split的分隔符? 让我举个例子: 我有一个List<SomeObject> ,我需要一个List<List<SomeObject>>或List<SomeObject>[] ,以便每个这样的结果列表将包含一组原始列表(按顺序)的3个项目。 例如。: 原始列表: [a, g, e, w, p, s, q, f, x, y, i, m, c] 结果列表: [a, g, e], [w, p, s], [q, f, x], [y, i, m], [c] 我也需要生成的列表大小作为这个函数的参数。

LINQ在特定属性上的Distinct()

我正在玩LINQ来了解它,但我不知道如何使用Distinct,当我没有一个简单的列表(一个简单的列表整数很容易做,这不是问题)。 我如果想在对象的一个或多个属性的列表上使用Distinct ? 例如:如果一个对象是Person ,带有Property Id 。 我怎样才能得到所有的人,并使用对象的属性Id使用Distinct ? Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1" Person3: Id=2, Name="Test2" 我怎样才能得到Person1和Person3? 那可能吗? 如果LINQ不可能,根据.NET 3.5中的一些属性,最好的办法是拥有一个Person列表?