从 LINQ 包含返回精确结果



我有表包含XYZ列示例。下面的示例数据。

XYZ
-------
Sales,
Sales_units,
Sales_Units_Per,
ATL

我必须编写一个 Linq 查询来传递一些输入值并获取结果,所以我使用以下代码进行相同的操作。

string check="Sales_units,ATL";
var res = objlist.where(x=> check.Contains(x.XYZ)).ToList();

这将返回以下值:

Sales,
Sales_units,
ATL

但我的结果应该是:Sales_units, ATL

谁能帮我解决问题。

提前谢谢。

试试这个 ->var check = new string[] { "Sales_units", "ATL" };

你的问题是单词"Sales_units"实际上包含"Sales"。 看起来您的数据允许首先沿,标记拆分字符串,然后查看子字符串是否相等,而不是它们是否包含某些内容。

另一种方法是使用正则表达式来查找开始或逗号,后跟单词,后跟结尾或逗号,中间有一些空格。

我冒昧地写出了一个字符串拆分版本。 我将把正则表达式版本留给你。

class Program
{
class Ws {
public string XYZ;
public Ws(string xyz) { XYZ = xyz; } }
static void ConsoleWrite(string name, IEnumerable<Ws> list) {
Console.WriteLine(name);
foreach (var item in list)
Console.WriteLine($"  '{item.XYZ}'"); }
static IEnumerable<Ws> Original(IEnumerable<Ws> objlist) {
string check = "Sales_units,ATL";
var res = objlist.Where(x => check.Contains(x.XYZ)).ToList();
return res; }
static IEnumerable<Ws> StringSplitVersion(IEnumerable<Ws> objlist) {
string[] checks = "Sales_units,ATL".Split(',');
return objlist.Where(x => checks.Any(c => c.Equals(x.XYZ))); }
static void Main(string[] args) {
var objlist = new List<Ws> { new Ws("Sales"), new Ws("Sales_units"), new Ws("Sales_Units_Per"), new Ws("ATL") };
ConsoleWrite("original", Original(objlist));
ConsoleWrite("stringsplit", StringSplitVersion(objlist)); }
}

尝试在LINQ 中加入语句。查看文档以获取更多见解。

static void Main()
{
string check = "Sales_units,ATL";
var checkList = check.Split(",");
var objlist = new List<Columns>();
var result = objlist.Join(checkList, c => c.XYZ, s => s, (c, s) => c);
}
class Columns
{
public string XYZ { get; set; }
}

最新更新