You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C#中使用Where子句从JSON列表查询Post类型对象

当然可行!基于Post类型实现JSON列表的搜索功能方案

完全没问题!你已经有了结构化的Post数据和对应的类型定义,实现搜索单个或多个Post对象是非常直接的。下面我给你分享具体的实现思路和代码示例,用TypeScript来演示(毕竟你提到了Post类型,TS能更好地做类型约束)。

首先,先把你的Post类型明确下来,和JSON结构一一对应:

type Post = {
  id: string;
  text: string;
  img: string;
  catid: string;
  meta_title: string;
  content: string;
  user_id: string;
};

接着把你的JSON数据解析成Post数组,这样后续操作都能享受类型提示:

// 你的原始JSON数据
const rawPostData = {
  "Post": [
    { "id":"22", "text":"Dream Big", "img":"a2ca3cf9-664e-4d92-80f1-df20e971b7c0.jpg", "catid":"12", "meta_title":"Dream Big Design", "content":"some text", "user_id":"5556" },
    { "id":"24", "text":"Handmade Resin", "img":"423233-971b7c0.jpg", "catid":"7", "meta_title":"Handmade Resin", "content":"some text", "user_id":"1256" }
  ]
};

// 转换成Post类型数组
const posts: Post[] = rawPostData.Post;

接下来分两种场景实现搜索:

1. 精确搜索单个Post(比如按ID查找)

如果你需要根据唯一标识(比如id)获取单个Post,用数组的find方法就可以,它会返回第一个匹配的元素,找不到就返回undefined:

function getSinglePostById(posts: Post[], targetId: string): Post | undefined {
  return posts.find(post => post.id === targetId);
}

// 使用示例:查找id为"22"的Post
const targetPost = getSinglePostById(posts, "22");
console.log(targetPost); // 输出第一个Post对象

2. 模糊/条件搜索多个Post

如果需要根据关键词、分类ID等条件筛选多个Post,用数组的filter方法最合适,它会返回所有符合条件的元素组成的数组:

示例1:按关键词匹配标题或文本

function searchPostsByKeyword(posts: Post[], keyword: string): Post[] {
  const lowerCaseKeyword = keyword.toLowerCase();
  // 忽略大小写匹配text或meta_title
  return posts.filter(post => 
    post.text.toLowerCase().includes(lowerCaseKeyword) || 
    post.meta_title.toLowerCase().includes(lowerCaseKeyword)
  );
}

// 使用示例:搜索包含"resin"的Post
const resinPosts = searchPostsByKeyword(posts, "resin");
console.log(resinPosts); // 输出第二个Post对象组成的数组

示例2:按分类ID筛选

function filterPostsByCategory(posts: Post[], catId: string): Post[] {
  return posts.filter(post => post.catid === catId);
}

// 使用示例:筛选分类ID为"12"的Post
const category12Posts = filterPostsByCategory(posts, "12");
console.log(category12Posts); // 输出第一个Post对象组成的数组

扩展:组合多个条件

你还可以根据需求组合多个搜索条件,比如同时匹配关键词和分类:

function advancedSearch(posts: Post[], keyword: string, catId: string): Post[] {
  const lowerCaseKeyword = keyword.toLowerCase();
  return posts.filter(post => 
    (post.text.toLowerCase().includes(lowerCaseKeyword) || post.meta_title.toLowerCase().includes(lowerCaseKeyword)) &&
    post.catid === catId
  );
}

如果你的数据量特别大,还可以考虑提前为常用的搜索字段(比如id、catid)建立索引,来提升搜索效率,但如果是普通规模的数据,直接用find和filter就足够好用了。

内容的提问来源于stack exchange,提问作者serdar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:30:33