首页 > 其他分享 >linq查询

linq查询

时间:2022-10-29 03:11:06浏览次数:45  
标签:itme Name List list linq 查询 new Id

最开始的对象查询是用foreach来遍历输出

List<string> fruits = new List<string>() { "苹果", "香蕉", "西瓜", "香瓜" };//{}对象集合初始化器,没有构造函数的初始化

Console.Write("请输入水果名:");
string str = Console.ReadLine();

foreach (var itme in fruits)
{
    if (itme.Contains(str)) Console.WriteLine(itme);//Contains模糊查询条件
}

Linq查询原理:其实就是把查询条件进行封装成一些个扩展方法

Linq to object(数组跟集合)查询的是内存数据

这里添加实体类做数据演示

//给实体类存放一些初始值
List<Students> plist = new List<Students>() { 
                new Students() { Id = 1, Name = "a冰箱", Price = 2300, Brand = "西门子1", Sell = "B202",lover = new List<string>(){ "苹果", "香蕉", "西瓜" }},
                new Students() { Id = 2, Name = "b冰箱", Price = 2400, Brand = "西门子2", Sell = "B303",lover = new List<string>(){ "木瓜", "芒果", "地瓜" }},
                new Students() { Id = 3, Name = "c电视", Price = 2500, Brand = "西门子3", Sell = "B404",lover = new List<string>(){ "橘子", "柿子", "水果" }},
                new Students() { Id = 4, Name = "d电视", Price = 2600, Brand = "西门子4", Sell = "B505",lover = new List<string>(){ "柚子", "香瓜", "西瓜" }}
            };
void Show(List<Students> fruits)
{
    foreach (var itme in fruits)
    {
        Console.WriteLine("编号:{0},商品名称:{1},商品价格:{2},商品品牌:{3},商品型号:{4}", itme.Id, itme.Name, itme.Price, itme.Brand, itme.Sell);
    }
}
Show(plist);

/// <summary>
/// 实体类:作用于数据传递。
/// </summary>
public class Students
{
    public Nullable<int> Id { get; set; } //Nullable<int>表示值类型也可以赋空值  int? id = null 就不会不错  一般来说int是没有空值 string有
    public string Name { get; set; }
    public int? Price { get; set; } // int?  是 Nullable<int> 的简化 ,不限制值类型,其他类型也可以用 除了字符串本身就可以有空值外加他没意义
    public string Brand { get; set; }
    public string Sell { get; set; }
    public List<string> lover { get; set; }
}

自定义linq:if语句的条件判断一步步演变过来的

var list = plist.MyWhere(x => x.Id == 1 && x.Name == "a冰箱").ToList();//自定义linq查询条件的筛选方法
Show(list);

public static class LinqExtend //扩展方法只能定义在静态类中,给IEnumerable接口添加MyWhere方法,IEnumerable是可迭代枚举型,可以被foreach遍历
{
    public static IEnumerable<T> MyWhere<T>(this IEnumerable<T> ts, Func<T, bool> func) //委托返回布尔值,Invoke执行委托,写不写都可以:func(item)也可以执行。
    {
        List<T> list = new List<T>();
        foreach (var item in ts)
        {
            if (func.Invoke(item)) list.Add(item);
        }
        return list;
    }
}

系统linq:上面是Where方法内部大概语法。where是官方给的扩展方法。

var list = plist.Where(x => x.Id == 1 && x.Name == "a冰箱").ToList();//系统linq的扩展方法where查询条件
Show(list);

表达式形式,这种方式最后生成代码和方法是一样的。建议使用扩展方法。语法:Select * from 数据源(表明)

var list = (from f in plist //数据源:也就是一个集合,遍历list
            orderby f.Id descending //orderby排序(默认的升序) 跟 descending降序   (ascending升序)
            where f.Name.Contains("冰箱") //Contains模糊查询
            select f).ToList();//显示结果返回给reus变量,可查询字段(如果查询全部直接放变量名) 就像f是变量名  数据库字段 f.id 这种得到字段的所有值
Show(list);

select方法是投影,

var list = plist.Select(s => new { id = s.Id, name = s.Name }).ToList();//var s = new {} 匿名类,匿名对象。
foreach (var itme in list) Console.WriteLine(itme.id + ":" + itme.name);

 





 

标签:itme,Name,List,list,linq,查询,new,Id
From: https://www.cnblogs.com/longxinyv/p/16837949.html

相关文章