[英]LINQ filter combining exact matches like SQL IN and StartsWith matches
[英]Perform a linq expression for 'contains' with searching through a list for 'like' not exact matches
好吧,我很困惑,到處都在尋找,我知道我正在做一些比需要的簡單得多的事情。 基本上,我有一個POCO對象,該對象將包含一個包含其他成員字符串的成員。 這被標記為“ st”,並且它的字符串中可能包含逗號分隔的字符串。 因此,我可能有兩個字符串成員為“ images,reports”和另一個“ cms,crm”。 我有一個對象列表,我想為這些字符串的PART OF匹配,但不一定要全部作為DISTINCT LIST。 因此,“ cms”的成員將返回包含“ cms”的任何值,因此將返回“ cms,crm”。
我想將其連接起來,以便可以查詢通用列表,但是我無法使其正常運行,並且正在查看其他線程,但是在我的情況下,這些方法不起作用。 我一直認為這很簡單,但我完全沒有想到。 如果有人有更好的主意,請告訴我。 我在這里看,但無法正確應用邏輯:
我一直在繼續范圍的不同級別上嘗試使用“選擇”,“ SelectMany”,“包含”,“任何”,“全部”的方法,但無濟於事。 這是我在一個簡單的控制台應用程序示例中所處位置的簡單摘錄:
public class Program
{
public class StringModel
{
public string name { get; set; }
public string str { get; set; }
}
static void Main(string[] args)
{
string s = "";
List<StringModel> sm = new List<StringModel>
{
new StringModel
{
name = "Set1",
str = "images, reports"
},
new StringModel
{
name = "Set2",
str = "cms, crm"
},
new StringModel
{
name = "Set3",
str = "holiday, pto, cms"
}
};
sm.ForEach(x => s += x.name + "\t" + x.str + "\n");
var selected = new List<object> {"cms", "crm"};
s += "\n\nITEMS TO SELECT: \n\n";
selected.ForEach(x => s += x + "\n");
s += "\n\nSELECTED ITEMS: \n\n";
// works on a single item just fine
var result = sm.Where(p => p.str.Contains("cms")).Select(x => new { x.name, x.str}).ToList();
// I am not using select to get POCO on other methods till I can get base logic to work.
// Does not return anything
var result2 = sm.Where(p => selected.Any(x => x == p.str)).ToList();
// Does not return anything
var result3 = sm.Where(p => selected.Any(x => selected.Contains(p.str))).ToList();
result.ForEach(y => s += y + "\n");
s += "\n\n2nd SET SELECTED: \n\n";
result2.ForEach(y => s += y + "\n");
s += "\n\n3rd SET SELECTED: \n\n";
result3.ForEach(y => s += y + "\n");
Console.WriteLine(s);
Console.ReadLine();
}
}
result2
為空,因為您正在將object
( x
)與string
( StringModel.str
)進行比較。 這將是一個參考比較 。 即使您將x
轉換為string
,也要將selected
值(“ cms”,“ crm”)中的每個值與逗號分隔的字符串值(“ images,reports”,“ cms,crm”,“假期”,“取力器,cms”)。
result3
為空,因為selected
(“ cms”,“ crm”)不包含任何字符串值(“ images,reports”,“ cms,crm”,“ holiday,pto,cms”),盡管在這種情況下至少比較就是價值比較。
我認為您正在尋找類似的東西:
var result = sm.Where(p => selected.Any(x => p.str.Contains((string)x)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.