Linq to SQL比较两个逗号分隔的字符串

时间:2015-11-24 12:05:31

标签: c# linq

我正在使用Linq to SQL,我有两个逗号分隔的字符串。

string1来自数据库表,看起来像“Y,J,A,F,L,R,G”。 string2是从对象获得的,看起来像“G,L”。

我正在努力检查string2的内容是否在string1

这就是我现在所拥有的:

var result = from d in oTable
             where d.string1.Contains(string2)
             select d;

6 个答案:

答案 0 :(得分:2)

因此,您可以查看AllAny方法,或使用Select获取每个字符的结果。

string first = "Y,J,A,F,L,R,G";
string second = "G,L,X";

// result for each in "second"
IEnumerable<bool> contains = second.Split(',').Select(res => first.Contains(res));
// true if all are contained in first
bool all = second.Split(',').All(res => first.Contains(res));
// true if any is contained in first
bool any = second.Split(',').Any(res => first.Contains(res));

答案 1 :(得分:1)

您可以尝试:

  1. 用逗号分隔第一个字符串和第二个字符串。
  2. 然后使用LINQ Except(MSDN reference)来检查string1的所有子字符串是否都包含在string1中

    <item name="android:textCursorDrawable">@null</item>
    

答案 2 :(得分:1)

感谢@SonerGönül以下工作。

var result = "G,L".All(c => "Y,J,A,F,L,R,G".Contains(c));

虽然我同意其他人的意见,但这并不是数据的存储方式,我会把它传递给我的客户。

答案 3 :(得分:1)

试试这种方式

string string2 = "G,L";
var result = from item in oTable
             where string2.All(x => item.string1.Contains(x))
             select item;

答案 4 :(得分:0)

您可以使用Union和Distinct。

var containts = string2.Union(string1).Count() == string1.Distinct().Count();

如果Union更改string1.Distinct()的长度,则表示string2中还有其他内容不在string1中。如果长度没有改变(==)那么它意味着string2中的每个东西都在string1内。

答案 5 :(得分:0)

您可以使用,Intersect

请参阅Demo Here

using System;
using System.Linq;      
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        string str="Y,J,A,F,L,R,G";
        string[] arr=str.Split(',');
        string[]  x=new String[2]{"G","r"};

        IEnumerable<String> x1=arr.Intersect(x);
        if(x1.Any())
        {
            foreach(string st in x1)
            {
                Console.WriteLine("Matched String: "+st);
            }
        }
        else
        {
            Console.WriteLine("Empty Matching");
        }

    }
}