标签: linq-to-objects

IEnumerable <T>/IQueryable <T>上的动态LINQ OrderBy

我在动态LINQ 的VS2008示例中找到了一个示例,它允许您使用类似sql的字符串(例如,OrderBy("Name, Age DESC"))用于排序.不幸的是,包含的方法仅适用于IQueryable<T>;.有没有办法获得此功能IEnumerable<T>

c# linq linq-to-objects

657
推荐指数
12
解决办法
26万
查看次数

使用linq删除列表中的重复项

我上课Itemsproperties (Id, Name, Code, Price).

列表中Items填充了重复的项目.

例如:

1         Item1       IT00001        $100
2         Item2       IT00002        $200
3         Item3       IT00003        $150
1         Item1       IT00001        $100
3         Item3       IT00003        $150
Run Code Online (Sandbox Code Playgroud)

如何使用linq删除列表中的重复项?

c# linq linq-to-objects generic-list

282
推荐指数
8
解决办法
26万
查看次数

使用Lambda/Linq对列表对列表进行排序

我在字符串中有"按属性排序"的名称.我将需要使用Lambda/Linq对对象列表进行排序.

例如:

public class Employee
{
  public string FirstName {set; get;}
  public string LastName {set; get;}
  public DateTime DOB {set; get;}
}


public void Sort(ref List<Employee> list, string sortBy, string sortDirection)
{
  //Example data:
  //sortBy = "FirstName"
  //sortDirection = "ASC" or "DESC"

  if (sortBy == "FirstName")
  {
    list = list.OrderBy(x => x.FirstName).toList();    
  }

}
Run Code Online (Sandbox Code Playgroud)
  1. 而不是使用一堆ifs来检查fieldname(sortBy),是否有更简洁的方法进行排序
  2. 排序是否知道数据类型?

c# linq lambda linq-to-objects

264
推荐指数
9
解决办法
47万
查看次数

了解LINQ

概观

LINQ,我在网站上提出了很多问题.我提出的问题范围广泛而且多种多样,往往背后没有太多背景.因此,为了巩固我在Linq上获得的知识,我发布了这个问题,以便在我继续学习LINQ时使用其他信息来维护和更新它.

我也希望它能够成为想要了解LINQ的其他人的有用资源.

什么是LINQ?

来自MSDN:

LINQ项目是.NET Framework的一组扩展的代号,包含语言集成的查询,设置和转换操作.它使用本机语言语法扩展C#和Visual Basic,并提供类库以利用这些功能.

这意味着LINQ提供了一种使用通用语法查询各种数据源的标准方法.

LINQ有哪些口味?

目前,Microsoft提供了一些不同的LINQ提供程序:

还有很多其他的,其中许多列在这里.

有什么好处?

  • 查询多个数据源的标准化方法
  • 编译查询的时间安全性
  • 在内存对象中执行基于集合的操作的优化方法
  • 能够调试查询

那么LINQ怎么办?

Chook提供了一种输出CSV文件的方法
Jeff显示了如何从数组中删除重复项
Bob 从数据表中获取一个不同的有序列表
Marxidad显示了如何对数组进行排序
Dana获得了使用Linq实现快速排序的帮助

从哪儿开始?

GateKiller的问题链接摘要如下:
Scott Guthrie 在他的博客上为Linq提供了一个介绍MSDN
LINQ的概述

ChrisAnnODell建议退房:

linq linq-to-objects linq-to-entities linq-to-sql

188
推荐指数
3
解决办法
2万
查看次数

代码相当于链式LINQ扩展方法调用中的'let'关键字

使用C#编译器查询理解功能,您可以编写如下代码:

var names = new string[] { "Dog", "Cat", "Giraffe", "Monkey", "Tortoise" };
var result =
    from animalName in names
    let nameLength = animalName.Length
    where nameLength > 3
    orderby nameLength
    select animalName; 
Run Code Online (Sandbox Code Playgroud)

在上面的查询表达式中,let关键字允许将值传递给where和orderby操作,而无需重复调用animalName.Length.

什么是LINQ扩展方法调用的等效集合,它实现了"let"关键字在这里的作用?

c# linq extension-methods linq-to-objects

186
推荐指数
3
解决办法
5万
查看次数

Linq选择列表中的对象IN(A,B,C)

我有一份清单orders.
我想orders根据一组订单状态进行选择.

所以基本上 select orders where order.StatusCode in ("A", "B", "C")

// Filter the orders based on the order status
var filteredOrders = from order in orders.Order
                     where order.StatusCode.????????("A", "B", "C")
                     select order;
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-objects list exists

148
推荐指数
4
解决办法
27万
查看次数

Find()vs. Where().FirstOrDefault()

我经常看到人们使用Where.FirstOrDefault()搜索并抓住第一个元素.为什么不用Find()?对方是否有优势?我无法区分.

namespace LinqFindVsWhere
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> list = new List<string>();
            list.AddRange(new string[]
            {
                "item1",
                "item2",
                "item3",
                "item4"
            });

            string item2 = list.Find(x => x == "item2");
            Console.WriteLine(item2 == null ? "not found" : "found");
            string item3 = list.Where(x => x == "item3").FirstOrDefault();
            Console.WriteLine(item3 == null ? "not found" : "found");
            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-objects

142
推荐指数
4
解决办法
10万
查看次数

如何让LINQ返回具有给定属性的最大值的对象?

如果我有一个类似于以下的类:

public class Item
{
    public int ClientID { get; set; }
    public int ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这些物品的集合......

List<Item> items = getItems();
Run Code Online (Sandbox Code Playgroud)

如何使用LINQ返回具有最高ID的单个"Item"对象?

如果我这样做:

items.Select(i => i.ID).Max(); 
Run Code Online (Sandbox Code Playgroud)

我只会得到最高的ID,当我真正想要返回的是具有最高ID的Item对象本身?我希望它返回一个"Item"对象,而不是int.

c# linq linq-to-objects

130
推荐指数
7
解决办法
10万
查看次数

Linq - SelectMany Confusion

根据我从SelectMany的文档中理解,可以使用它来生成1-many关系的(扁平化)序列.

我有以下课程

  public class Customer
  {
    public int Id { get; set; }
    public string Name { get; set; }
  }

  class Order
  {
    public int Id { get; set; }
    public int CustomerId { get; set; }
    public string Description { get; set; }
  }
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用查询表达式语法来使用它们

  var customers = new Customer[]
  {
    new Customer() { Id=1, Name ="A"},
    new Customer() { Id=2, Name ="B"},
    new Customer() { Id=3, Name ="C"}
  };

  var orders = new Order[]
  {
    new Order …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-objects data-structures

81
推荐指数
3
解决办法
8万
查看次数

如何使用LINQ过滤字典并将其返回到相同类型的字典

我有以下字典:

Dictionary<int,string> dic = new Dictionary<int,string>();
dic[1] = "A";
dic[2] = "B";
Run Code Online (Sandbox Code Playgroud)

我想过滤字典的项目并将结果重新分配给同一个变量:

dic = dic.Where (p => p.Key == 1);
Run Code Online (Sandbox Code Playgroud)

如何将结果作为字典从同一类型[ <int,string>]返回?

我试过ToDictionary,但它不起作用.

提前致谢.

c# linq linq-to-objects dictionary

76
推荐指数
1
解决办法
6万
查看次数