簡體   English   中英

搜索列表中的“喜歡”,不完全匹配的內容,從而對包含的內容執行linq表達式

[英]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”。

我想將其連接起來,以便可以查詢通用列表,但是我無法使其正常運行,並且正在查看其他線程,但是在我的情況下,這些方法不起作用。 我一直認為這很簡單,但我完全沒有想到。 如果有人有更好的主意,請告訴我。 我在這里看,但無法正確應用邏輯:

Linq查詢列表包含一個列表

我一直在繼續范圍的不同級別上嘗試使用“選擇”,“ 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為空,因為您正在將objectx )與stringStringModel.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM