LINQ�F���G�Ȍ��������邽�߂ɓƎ���Where���\�b�h�����ɂ́H�mC#�AVB�n�F.NET TIPS

LINQ���g�p���ĕ����̔�r������AND��������ۂɁA�Ǝ���Where���\�b�h���쐬���邱�ƂŃR�[�h�̉“ǐ������߂���@���������B

» 2014�N12��22�� 17��00�� ���J
[�R�{�N�F�CBluewaterSoft�^Microsoft MVP for Windows Platform Development]
.NET TIPS
Insider.NET

�@

u.NET TIPSṽCfbNX

�A�ږڎ�

�ΏہF.NET 3.5�ȍ~


�@������̃R���N�V������LINQ���g���Ď��X�ƌ�������Ƃ��ɁA��r�������ꍇ�����������Ƃ�������B�Ⴆ�΁A�����́uLIKE�����v��AND�Ō����������Ƃ��Ȃǂ��B���̂܂܃R�[�h�������������Ή”\�Ȃ̂����A�R�[�h�̉“ǐ����グ�悤�Ƃ��Ď��s���邱�Ƃ�����B�{�e�ł́A���s�������Љ�A���̑΍�Ƃ��āuWhere���\�b�h�v��Ǝ��ɍ쐬���Ďg�����@���������B

AND�^OR�����荬���������G�ȏ����̏ꍇ

�@���炩���߂��f�肵�Ă������AAND�^OR�₩���������荬�������{���ɕ��G�ȏ����̏ꍇ�ɂ́A�����_��*1�𓮓I�ɑg�ݗ��ĂĎ��c���[�𐶐����邱�ƂɂȂ�B���̂悤�ȕ��G�Ȍ��������ł́A�\����͂��K�{�ł��낤�B�\����͂��s���Ȃ�A���̂‚��łɎ��c���[�𐶐�����̂͂���قǍ���Ȃ��Ƃł͂Ȃ��B���c���[�𐶐�������@�́A�u.NET TIPS�FLINQ���œ��I��Where���g�ݗ��Ă�ɂ́H�m3.5�AC#�AVB�n�v���Q�Ƃ��Ăق����B

�@�{�e�ł́AAND�����̏��������l����B�����@�\����������Ƃ��ɁA�󔒂ŋ�؂�ꂽ����S��AND�����Ƃ��Ĉ����悤�ȊȈՓI�Ȍ������@��z�肵�Ă���B

���O����

�@�{�e�ł́AWhere���\�b�h�iSystem.Linq���O��Ԃ�Enumerable�N���X�ɒ�`���ꂽ�g�����\�b�h�j�����ۂǂ̂悤�ɓ��삷��̂����m�F�������B��������؂��邽�߂ɁA��r���e���R���\�[���ɏo�͂��镶�����r���\�b�h���O�—p�ӂ��Ă����i���̃R�[�h�j�BString�N���X�̕������r���\�b�h�Ɠ��l�ɋ@�\����̂����A�R���\�[���ɏo�͂���_���قȂ��Ă���B

using System;

public static class StringExtension
{
  // String�N���X��Contains���\�b�h�Ɠ��������A�������e���R���\�[���ɏ����o��
  public static bool ContainsEx(this string s, string key)
  {
    var result = s.Contains(key);
    Console.WriteLine("\"{0}\".Contains(\"{1}\") {2}", s, key, result ? "��" : "�~");
    return result;
  }

  // String�N���X��StartsWith���\�b�h�Ɠ��������A�������e���R���\�[���ɏ����o��
  public static bool StartsWithEx(this string s, string key)
  {
    var result = s.StartsWith(key);
    Console.WriteLine("\"{0}\".StartsWith(\"{1}\") {2}", s, key, result ? "��" : "�~");
    return result;
  }

  // String�N���X��EndsWith���\�b�h�Ɠ��������A�������e���R���\�[���ɏ����o��
  public static bool EndsWithEx(this string s, string key)
  {
    var result = s.EndsWith(key);
    Console.WriteLine("\"{0}\".EndsWith(\"{1}\") {2}", s, key, result ? "��" : "�~");
    return result;
  }
}

Imports System.Runtime.CompilerServices

Module StringExtension
  ' String�N���X��Contains���\�b�h�Ɠ��������A�������e���R���\�[���ɏ����o��
  <Extension()> _
  Public Function ContainsEx(ByVal s As String, ByVal key As String) As Boolean
    Dim result = s.Contains(key)
    Console.WriteLine("""{0}"".Contains(""{1}"") {2}", s, key, If(result, "��", "�~"))
    Return result
  End Function

  ' String�N���X��StartsWith���\�b�h�Ɠ��������A�������e���R���\�[���ɏ����o��
  <Extension()> _
  Public Function StartsWithEx(ByVal s As String, ByVal key As String) As Boolean
    Dim result = s.StartsWith(key)
    Console.WriteLine("""{0}"".StartsWith(""{1}"") {2}", s, key, If(result, "��", "�~"))
    Return result
  End Function

  ' String�N���X��EndsWith���\�b�h�Ɠ��������A�������e���R���\�[���ɏ����o��
  <Extension()> _
  Public Function EndsWithEx(ByVal s As String, ByVal key As String) As Boolean
    Dim result = s.EndsWith(key)
    Console.WriteLine("""{0}"".EndsWith(""{1}"") {2}", s, key, If(result, "��", "�~"))
    Return result
  End Function
End Module

��r���e���R���\�[���ɏo�͂��镶�����r���\�b�h�i��FC#�A���FVB�j
�g�����\�b�h�Ƃ��Ď������Ă���B�g�����\�b�h��Visual Studio 2008�œ������ꂽ�@�\���B�ڂ�����MSDN�́u�g�����\�b�h (C# �v���O���~���O �K�C�h)�v�^�u�g�����\�b�h (Visual Basic)�v�������������������B
�܂��A����VB�̃R�[�h�ł́AVisual Basic 2008�̐V�@�\�ł���uIf���Z�q�v���g���Ă���B

����̃P�[�X���n�[�h�R�[�f�B���O���Ă݂�

�@SQL��LIKE���Z�q�̂悤�ȕ����񌟍���LINQ�Ŏ�������ɂ́A�u.NET TIPS�FLINQ�F������R���N�V�����ŁuLIKE�����v�i������v�����j������ɂ́H�mC#�AVB�n�v�ŏq�ׂ��悤�ɁA������Ɋ܂܂�Ă���u%�v�̈ʒu�ɂ���ĕ������r�̏��������g��������B�܂��AAND�����́u.NET TIPS�FLINQ�F������R���N�V�����ŕ����L�[���[�h��AND����������ɂ́H�mC#�AVB�n�v�Ő��������悤�ɁAWhere���\�b�h�����X�Ƀ`�F�[������΂悢�B

�@�����Ȃ�ėp�I�ȃR�[�h�������͓̂���̂ŁA�܂��͌�������Œ肵�āA����̃P�[�X�����ɑΉ��ł���R�[�h�������Ă݂悤�B���̃R�[�h�̂悤�ɁuLIKE�����v��AND��\���ł���B

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

class Program
{
  // �R���\�[���o�͗p�̃��\�b�h
  static void WriteItems(string header, IEnumerable<string> items)
  {
    var output = string.Join(", ", items.ToArray());
    Console.WriteLine("{0}: {1}", header, output);
  }

  static void Main(string[] args)
  {
    // �T���v���f�[�^�i������̔z��j
    IEnumerable<string> sampleData = new string[] { "�Ԃ�", "���Ԃ�", "�Ԃ��܂�", "�˂Ԃ��܂‚�",
                                                    "�˂Ղ��܂‚�", "���‚�", "�˂�", };
    WriteItems("sampleData", sampleData);

    // LIKE '��%' AND LIKE '%��' AND LIKE '%�Ԃ�%' �̂悤�Ȍ�����������

    // �n�[�h�R�[�f�B���O���Ă݂�
    Console.WriteLine();
    Console.WriteLine("����P�[�X���n�[�h�R�[�f�B���O");

    var case1 = sampleData.Where(item => item.StartsWithEx("��"))
                          .Where(item => item.EndsWithEx("��"))
                          .Where(item => item.ContainsEx("�Ԃ�"));
    WriteItems("Where���\�b�h�����n�[�h�R�[�f�B���O", case1);
    // �� Where���\�b�h�����n�[�h�R�[�f�B���O: �˂Ԃ��܂‚�

#if DEBUG
    Console.ReadKey();
#endif
  }
}

Module Module1

  ' �R���\�[���o�͗p�̃��\�b�h
  Sub WriteItems(ByVal header As String, ByVal items As IEnumerable(Of String))
    Dim output = String.Join(", ", items.ToArray())
    Console.WriteLine("{0}: {1}", header, output)
  End Sub

  Sub Main()
    ' �T���v���f�[�^�i������̔z��j
    Dim sampleData As IEnumerable(Of String) _
      = New String() {"�Ԃ�", "���Ԃ�", "�Ԃ��܂�", "�˂Ԃ��܂‚�", _
                      "�˂Ղ��܂‚�", "���‚�", "�˂�"}
    WriteItems("sampleData", sampleData)

    ' LIKE '��%' AND LIKE '%��' AND LIKE '%�Ԃ�%' �̂悤�Ȍ�����������

    ' �n�[�h�R�[�f�B���O���Ă݂�
    Console.WriteLine()
    Console.WriteLine("����P�[�X���n�[�h�R�[�f�B���O")

    Dim case1 = sampleData.Where(Function(item) item.StartsWithEx("��")) _
                          .Where(Function(item) item.EndsWithEx("��")) _
                          .Where(Function(item) item.ContainsEx("�Ԃ�"))
    WriteItems("Where���\�b�h�����n�[�h�R�[�f�B���O", case1)
    ' �� Where���\�b�h�����n�[�h�R�[�f�B���O: �˂Ԃ��܂‚�

#If DEBUG Then
    Console.ReadKey()
#End If
  End Sub

End Module

����̃P�[�X���n�[�h�R�[�f�B���O���Ă݂��i��FC#�A���FVB�j
Visual Studio����f�o�b�O���s�����Ƃ��A�R���\�[���������ɕ‚��Ă��܂�Ȃ��悤�ɁuConsole.ReadKey()�v�ƋL�q���Ă���B�����ʼn����L�[�������ƃv���O�����͏I������B
����LINQ���ł�Where���\�b�h���O�ƒ`�F�[�����āA�u"��"�Ŏn�܂�A���A"��"�ŏI���A���A"�Ԃ�"���܂ށv��������������Ă���B

�@���̃R�[�h�̎��s���ʂ́A���̉摜�̂悤�ɂȂ�B

̃P[Xn[hR[fBOꍇ̎s ����̃P�[�X���n�[�h�R�[�f�B���O�����ꍇ�̎��s����
�u"��"�Ŏn�܂�A���A"��"�ŏI���A���A"�Ԃ�"���܂ށv������Ƃ��āA�������u�˂Ԃ��܂‚�v���o�͂���Ă���B
AND�����ɂ‚��Ă̓V���[�g�T�[�L�b�g�]���ɂȂ��Ă���i�u"�Ԃ�"�v��u"���Ԃ�"�v��"��"�Ŏn�܂��Ă��Ȃ��̂ŁA�ŏ���StartsWith���\�b�h�ɂ���r�����������ł���ȍ~�̔�r��ł��؂��Ă���j�B���̌������Ȃ�ׂ����Ƃ����ɔėp�I�ȃR�[�h�ɏ������������̂ł���B

�@���̃R�[�h�ł́A�^���錟����́u%�v�̈ʒu��ς������Ƃ��ɑΉ��ł��Ȃ��i�ǂ̌�����łǂ̕������r���\�b�h���g���������ߑł��ɂȂ��Ă���j�B�܂��A�^���錟����̐����Œ肳��Ă���B�����ėp�I�ȃR�[�h�ɏ������������̂��B

�f���Ƀ��[�v�����Ă݂�

�@��̃R�[�h��ėp�����Ă݂悤�B������̐����ύX�ł���悤�Ƀ��[�v�ɂ���B������́u%�v�̈ʒu�ɂ���ė��p���镶�����r���\�b�h��؂蕪����̂́A���[�v�̒��ōs�����B����ƁA���̃R�[�h�̂悤�ɏ�����B

string[] keywords = { "��%", "%��", "%�Ԃ�%", };  // ������i�u%�v�t���j

Console.WriteLine();
Console.WriteLine("Where���\�b�h�����ǂ����邩���[�v���Ŕ���");

var case2 = sampleData;
foreach (var keyword in keywords)
{
  var k = keyword.Trim("%".ToCharArray());
  if (keyword.StartsWith("%") && keyword.EndsWith("%"))
  {
    Console.WriteLine("�L�[���[�h'{0}'�ɂ�ContainsEx���g��", keyword); // ��
    case2 = case2.Where(item => item.ContainsEx(k));
  }
  else if (keyword.StartsWith("%"))
  {
    Console.WriteLine("�L�[���[�h'{0}'�ɂ�EndsWithEx���g��", keyword); // ��
    case2 = case2.Where(item => item.EndsWithEx(k));
  }
  else if (keyword.EndsWith("%"))
  {
    Console.WriteLine("�L�[���[�h'{0}'�ɂ�StartsWithEx���g��", keyword); // ��
    case2 = case2.Where(item => item.StartsWithEx(k));
  }
  else
  {
    Console.WriteLine("�L�[���[�h'{0}'�ɂ�Equals���g��", keyword); // ��
    case2 = case2.Where(item => item.Equals(k));
  }
}
WriteItems("Where���\�b�h�����ǂ����邩���[�v���Ŕ���", case2); // ��
// �� Where���\�b�h�����ǂ����邩���[�v���Ŕ���: �˂Ԃ��܂‚�

Dim keywords = New String() {"��%", "%��", "%�Ԃ�%"} ' ������i�u%�v�t���j

Console.WriteLine()
Console.WriteLine("Where���\�b�h�����ǂ����邩���[�v���Ŕ���")

Dim case2 = sampleData
For Each keyword In keywords
  Dim k = keyword.Trim("%".ToCharArray())
  If (keyword.StartsWith("%") AndAlso keyword.EndsWith("%")) Then
    Console.WriteLine("�L�[���[�h'{0}'�ɂ�ContainsEx���g��", keyword) ' ��
    case2 = case2.Where(Function(item) item.ContainsEx(k))
  ElseIf (keyword.StartsWith("%")) Then
    Console.WriteLine("�L�[���[�h'{0}'�ɂ�EndsWithEx���g��", keyword) ' ��
    case2 = case2.Where(Function(item) item.EndsWithEx(k))
  ElseIf (keyword.EndsWith("%")) Then
    Console.WriteLine("�L�[���[�h'{0}'�ɂ�StartsWithEx���g��", keyword) ' ��
    case2 = case2.Where(Function(item) item.StartsWithEx(k))
  Else
    Console.WriteLine("�L�[���[�h'{0}'�ɂ�Equals���g��", keyword) ' ��
    case2 = case2.Where(Function(item) item.Equals(k))
  End If
Next
WriteItems("Where���\�b�h�����ǂ����邩���[�v���Ŕ���", case2)
' �� Where���\�b�h�����ǂ����邩���[�v���Ŕ���: �˂Ԃ��܂‚�

�f���Ƀ��[�v�������R�[�h��i��FC#�A���FVB�j
���������s���镔�������������i�T���v���f�[�^�̍쐬�Ȃǂ͑O�Ɠ����j�B
�����ł́A������Ɂu%�v���܂܂�Ȃ��ꍇ���z�肵�Ă���i���̂Ƃ���String�N���X��Equals���\�b�h�ł̔�r�Ƃ����j�B
�R�����g�Łu���v���t�����s�ɒ��ڂ��Ăق����B�����͎��ۂ̃R�[�h�ł͕s�v�Ȃ̂����Aif�������s���ꂽ�^�C�~���O�����邽�߂ɓ���Ă���i���̎��s���ʉ�ʂ��Q�Ɓj�B
�ǂ̕������r���g�����𓮓I�Ɍ��肷�邽�߂ɁAif�����炯�̃R�[�h�ɂȂ��Ă��܂����B���̃R�[�h���������\�b�h�̓r���ɓ����Ă����ꍇ�ɂ́A�R�[�h�̉“ǐ��������Ƃ͂����Ȃ����낤�B���̃��[�v�̒��g��ʂ̃��\�b�h�ɐ؂�o���ăV���v���ɂ������̂ł���B

�@���̎��s���ʂ͎��̉摜�̂悤�ɂȂ�B

fɃ[vꍇ̎s �f���Ƀ��[�v�������ꍇ�̎��s����
�����ꂲ�Ƃ�1�񂾂��Aif���ɂ�锻�菈�������s����Ă���i2�s�ځ`4�s�ځj�B
�S�Ă̔��菈�����I����Ă���LINQ�̌������������s����Ă���_�ɂ����ڂ��Ăق���*2�i5�s�ڈȍ~�j�B�����������̂́A�O�q�̓���̃P�[�X���n�[�h�R�[�f�B���O�����ꍇ�ƑS�����l�ɍs���Ă���B

�@�ėp�I�ȃR�[�h�ɂł������̂́A���̂܂܂ł͉“ǐ��ɓ����B�����ƃX�}�[�g�ȃR�[�h�ɂ������̂��B

�uLIKE�v������s�����\�b�h�����i���s��j

�@��̃R�[�h�̉“ǐ����グ��ɂ́AWhere���\�b�h�ɗ^����������莮��ėp�I�Ȃ��̂ɂ���΂悢�A�Ƃ������z�����蓾��B�ėp�I�ȏ������胁�\�b�h�����΁A���[�v����if�����Ȃ�����̂ł���B����Ă݂悤�B

�@�܂��A�������胁�\�b�h�uLikeEx�v���A�`���Ɏ�����ContainsEx���\�b�h�Ȃǂ�StringExtension�N���X�̒��Ɋg�����\�b�h�Ƃ��č쐬����i���̃R�[�h�j�B

public static class StringExtension
{
  // �c�c�����R�[�h�ȗ��c�c

  // LIKE������s�����\�b�h
  public static bool LikeEx(this string item, string keyword)
  {
    var k = keyword.Trim("%".ToCharArray());
    if (keyword.StartsWith("%") && keyword.EndsWith("%"))
    {
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�ContainsEx���g��", keyword); // ��
      return item.ContainsEx(k);
    }
    else if (keyword.StartsWith("%"))
    {
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�EndsWithEx���g��", keyword); // ��
      return item.EndsWithEx(k);
    }
    else if (keyword.EndsWith("%"))
    {
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�StartsWithEx���g��", keyword); // ��
      return item.StartsWithEx(k);
    }
    else
    {
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�Equals���g��", keyword); // ��
      return item.Equals(k);
    }
  }
}

Imports System.Runtime.CompilerServices

Module StringExtension
  ' �c�c�����R�[�h�ȗ��c�c

  ' LIKE������s�����\�b�h
  <Extension()> _
  Public Function LikeEx(ByVal item As String, ByVal keyword As String) As Boolean
    Dim k = keyword.Trim("%".ToCharArray())
    If (keyword.StartsWith("%") AndAlso keyword.EndsWith("%")) Then
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�ContainsEx���g��", keyword) ' ��
      Return item.ContainsEx(k)
    ElseIf (keyword.StartsWith("%")) Then
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�EndsWithEx���g��", keyword) ' ��
      Return item.EndsWithEx(k)
    ElseIf (keyword.EndsWith("%")) Then
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�StartsWithEx���g��", keyword) ' ��
      Return item.StartsWithEx(k)
    Else
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�Equals���g��", keyword) ' ��
      Return item.Equals(k)
    End If
  End Function

End Module

�uLIKE�v������s���uLikeEx�v���\�b�h�i��FC#�A���FVB�j
�uLike�v�Ƃ������\�b�h���ɂ��Ȃ������̂́AVB��Like���Z�q�Əd�����邩��ł���B
��قǂ̃R�[�h�Ɠ��l�ɁAif�������s���ꂽ�^�C�~���O�����邽�߂Ɂu���v��̍s�����Ă���i��̎��s���ʉ�ʂ��Q�Ɓj�B

�@����ƁALINQ�Ō��������s���镔���̃R�[�h�́A���̂悤�ɃV���v���ɏ�����B

Console.WriteLine();
Console.WriteLine("Where���\�b�h�̃����_�����uLikeEx�v���\�b�h�œ���");

var case3 = sampleData;
foreach (var keyword in keywords)
{
  var k = keyword;  // VS2012�ȍ~�ł́A���̕ϐ��ւ̑���͕s�v
  case3 = case3.Where(item => item.LikeEx(k));
}
WriteItems("Where���\�b�h�̃����_�����uLikeEx�v���\�b�h�œ���", case3);
// �� Where���\�b�h�̃����_�����uLikeEx�v���\�b�h�œ���: �˂Ԃ��܂‚�

Console.WriteLine()
Console.WriteLine("Where���\�b�h�̃����_�����uLikeEx�v���\�b�h�œ���")

Dim case3 = sampleData
For Each keyword In keywords
  Dim k = keyword  ' VS2012�ȍ~�ł́A���̕ϐ��ւ̑���͕s�v
  case3 = case3.Where(Function(item) item.LikeEx(k))
Next
WriteItems("Where���\�b�h�̃����_�����uLikeEx�v���\�b�h�œ���", case3)
' �� Where���\�b�h�̃����_�����uLikeEx�v���\�b�h�œ���: �˂Ԃ��܂‚�

�쐬�����uLikeEx�v���g���ă��[�v���������������R�[�h��i��FC#�A���FVB�j
���������s���镔�������������i�T���v���f�[�^�̍쐬�Ȃǂ͑O�Ɠ����j�B
����Ȃ�Z���R�����g�i�uWhere�̃`�F�[����AND�����v�Ƃ��������x�j��t���Ă��������ŁA�ォ�瓪��������ɍςނ��낤�B

�@���C���̃R�[�h���Z���Ȃ�A�“ǐ��͏オ�����B�Ƃ��낪�A��������s����Ǝ��̉摜�̂悤�Ȍ��ʂɂȂ��Ă��܂��B

쐬uLikeExvgă[vꍇ̎s �쐬�����uLikeEx�v���g���ă��[�v���������������ꍇ�̎��s����
�ŏI�I�ɏo�͂���錋�ʂ͐������B�������A��������r���邲�Ƃ�if���ɂ�锻�菈�������s����Ă��܂��Ă���B��قǂ̑f���Ƀ��[�v�������ꍇ�ɂ́A���菈����3�񂾂��������B����������Nj��������Ƃ��ɂ́A����͂悭�Ȃ����낤�B

�@�uLIKE�v���胁�\�b�h�������@�́A�������悭�Ȃ��ƕ��������B�Ȃ������Ȃ����̂��낤���H Where���\�b�h�̈����ɗ^���郉���_���́A�R���N�V�����̗v�f���ƂɌĂяo����邱�Ƃ��v���o���Ăق����B���̌Ăяo���̒��ɔ��菈�����L�q���Ă��܂����̂�����A�v�f���ƂɎ��s����Ă��܂����̂ł���i�����āA3�񃋁[�v���Ă���̂ŁA�v�f���Ƃɍő�3��܂ŌJ��Ԃ��Ăяo����邱�ƂɂȂ�j�B

�Ǝ��́uWhere���\�b�h�v�����

�@��̎��s�������ɂ͂ǂ�������悢���낤���H Where���\�b�h�̈����ɗ^���郉���_���̒��ɔ��菈�����L�q�ł��Ȃ��Ƃ�����A�ǂ��ɏ����΂悢�̂��H �Ǝ��́uWhere���\�b�h�v������āA�����Ŕ��菈�����s���΂悢�̂ł���B

�@�Ǝ��́uWhere���\�b�h�v�Ƃ��āuWhereLike�v�Ƃ������O�̃��\�b�h�����i���̃R�[�h�j�BLINQ�̃`�F�[���Ŏg�������̂ŁAIEnumerable<string>�C���^�[�t�F�[�X�iC#�j�^IEnumerable(Of String)�C���^�[�t�F�[�X�iVB�j��Ԃ��g�����\�b�h�Ƃ��Ď�������B���́uWhereLike�v���\�b�h�̒��g�́A�O�q�����f���Ƀ��[�v�������R�[�h��̃��[�v����؂�o�����`�ɂȂ�B

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

public static class LinqExtension
{
  public static IEnumerable<string> WhereLike(
    this IEnumerable<string> items, string keyword)
  {
    var k = keyword.Trim("%".ToCharArray());
    if (keyword.StartsWith("%") && keyword.EndsWith("%"))
    {
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�ContainsEx���g��", keyword); // ��
      return items.Where(item => item.ContainsEx(k));
    }
    else if (keyword.StartsWith("%"))
    {
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�EndsWithEx���g��", keyword); // ��
      return items.Where(item => item.EndsWithEx(k));
    }
    else if (keyword.EndsWith("%"))
    {
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�StartsWithEx���g��", keyword); // ��
      return items.Where(item => item.StartsWithEx(k));
    }
    else
    {
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�Equals���g��", keyword); // ��
      return items.Where(item => item.Equals(k));
    }
  }
}

Imports System.Runtime.CompilerServices

Module LinqExtension
  <Extension()> _
  Public Function WhereLike(ByVal items As IEnumerable(Of String), _
                            ByVal keyword As String) As IEnumerable(Of String)
    Dim k = keyword.Trim("%".ToCharArray())
    If (keyword.StartsWith("%") AndAlso keyword.EndsWith("%")) Then
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�ContainsEx���g��", keyword) ' ��
      Return items.Where(Function(item) item.ContainsEx(k))
    ElseIf (keyword.StartsWith("%")) Then
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�EndsWithEx���g��", keyword) ' ��
      Return items.Where(Function(item) item.EndsWithEx(k))
    ElseIf (keyword.EndsWith("%")) Then
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�StartsWithEx���g��", keyword) ' ��
      Return items.Where(Function(item) item.StartsWithEx(k))
    Else
      Console.WriteLine("�L�[���[�h'{0}'�ɂ�Equals���g��", keyword) ' ��
      Return items.Where(Function(item) item.Equals(k))
    End If
  End Function
End Module

�Ǝ��́uWhere���\�b�h�v�Ƃ��č쐬�����uWhereLike�v���\�b�h�i��FC#�A���FVB�j
������ɂ���ďꍇ���������A���ꂼ���Where���\�b�h�̈قȂ�Ăяo���������Ă���BLINQ�̃`�F�[���Ŏg���郁�\�b�h�����ꍇ�ɁA���̂悤�ɓ�����LINQ�̃��\�b�h���Ăяo���`�ō��̂͊ȒP�Ȃ̂ł���i�����łȂ��Ƃ��́AIEnumerable<T>�^IEnumerable(Of T)�C���^�[�t�F�[�X��Ԃ����߂�yield�^Yield�X�e�[�g�����g���g�����ƂɂȂ�A������Ȃ�j�B
��قǂ܂ł̃R�[�h�Ɠ��l�ɁAif�������s���ꂽ�^�C�~���O�����邽�߂Ɂu���v��̍s�����Ă���i��̎��s���ʉ�ʂ��Q�Ɓj�B
�Ȃ��A�����ł͕�����₷���悤�ɁuWhereLike�v�Ƃ������\�b�h���ɂ������A�uWhere�v�Ƃ��Ă����Ȃ��B������Where���\�b�h�Ƃ͈������قȂ邽�ߏՓ˂��Ȃ����炾�B���̂悤�ȗ�́A�u.NET TIPS�FLINQ���œ��I��Where���g�ݗ��Ă�ɂ́H�m3.5�AC#�AVB�n�v�ŏЉ���uLINQ���I�N�G�����C�u�����v�Ɍ�����B

�@������g���ƁALINQ�Ō��������s���镔���͎��̃R�[�h�̂悤�ɂȂ�B

Console.WriteLine();
Console.WriteLine("�Ǝ��́uWhere���\�b�h�v�����");

var case4 = sampleData;
foreach (var keyword in keywords)
{
  case4 = case4.WhereLike(keyword);
}
WriteItems("�Ǝ��́uWhere���\�b�h�v�����", case4);
// �� �Ǝ��́uWhere���\�b�h�v�����: �˂Ԃ��܂‚�

Console.WriteLine()
Console.WriteLine("�Ǝ��́uWhere���\�b�h�v�����")

Dim case4 = sampleData
For Each keyword In keywords
  case4 = case4.WhereLike(keyword)
Next
WriteItems("�Ǝ��́uWhere���\�b�h�v�����", case4)
' �� �Ǝ��́uWhere���\�b�h�v�����: �˂Ԃ��܂‚�

�쐬�����uWhereLike�v���g���ă��[�v���������������R�[�h��i��FC#�A���FVB�j
���������s���镔�������������i�T���v���f�[�^�̍쐬�Ȃǂ͑O�Ɠ����j�B
������Z���R�����g�i�uWhere�̃`�F�[����AND�����v�Ƃ��������x�j��t���邭�炢�ŗ����ł���R�[�h�ɂȂ��Ă��邾�낤�i�T���v���R�[�h�̈ꕔ�Ƃ��ĕt�����ucase4�v�Ƃ����ϐ����͕ύX��v���j�B

�@���̎��s���ʂ�����ƁA���ʂȔ��菈���͍s���Ă��Ȃ��i���̉摜�j�B

쐬uWhereLikevgă[vꍇ̎s �쐬�����uWhereLike�v���g���ă��[�v���������������ꍇ�̎��s����
��قǂ̑f���Ƀ��[�v�������ꍇ�Ɠ��l�̌��ʂ�����ꂽ�B
�uWhereLike�v���\�b�h���ŌĂяo���Ă���Where���\�b�h�͒x�����s�����̂ŁA���̂悤�ɔ��菈����������ɑS�Ď��s����A���ꂩ��Where���\�b�h�����s�����B

�@���̂悤�ɓƎ��́uWhere���\�b�h�v����邱�ƂŁA�����𗎂Ƃ����ɃR�[�h�̉“ǐ������P�ł����B

�܂Ƃ�

�@LINQ�̈����ɗ^���郉���_���̒��ŃR���N�V�����̗v�f�ȊO�̂��́i�{�e�̗�ł͌�����j��ΏۂƂ��鏈�����s���̂͌����������B���̂悤�ȂƂ��ɂ́A�Ǝ��́uWhere���\�b�h�v�̍쐬���������悤�i�{�e�̗�͂��ꂪ���܂��s�����ꍇ�ł���j�B

�@LINQ�̃`�F�[���Ŏg����Ǝ��́uWhere���\�b�h�v�i���邢�́A���̑��D���ȏ������s�����\�b�h�j�́A�V�O�l�`���i�g�����\�b�h�ŁA�ŏ��̈����ƕԒl��IEnumerable<T>�^IEnumerable(Of T)�C���^�[�t�F�[�X�ł��邱�Ɓj�ɋC��t����΁A���̂͂���قǓ���Ȃ��B

*1�@Where�g�����\�b�h�̈����ɂ́A�����_����^����B�����_���ɂ‚��ďڂ����́A����MSDN�̃h�L�������g���Q�Ƃ��Ă������������B

*2�@���̋@�\�́u�N�G���̒x���]���i�܂��͒x�����s�j�v�ƌĂ΂��B�ڂ�����MSDN�Ɍf�ڂ���Ă���uLINQ: .NET ��������N�G���v�iDon Box�AAnders Hejlsberg���j�́uLINQ �v���W�F�N�g���T�|�[�g���錾��@�\�v�̍����A�u�N�G���̒x���]���v�̍����Q�Ƃ��Ă������������B


���p�”\�o�[�W�����F.NET Framework 3.5�ȍ~
�J�e�S���F�N���X���C�u�����@�����ΏہFLINQ
�g�p���C�u�����FEnumerable�N���X�iSystem.Linq���O��ԁj
�g�p���C�u�����FString�N���X�iSystem���O��ԁj
�֘ATIPS�FLINQ�F������R���N�V�����ŁuLIKE�����v�i������v�����j������ɂ́H�mC#�AVB�n
�֘ATIPS�FLINQ�F������R���N�V�����ŕ����L�[���[�h��AND����������ɂ́H�mC#�AVB�n


u.NET TIPSṽCfbNX

�u.NET TIPS�v

Copyright© Digital Advantage Corp. All Rights Reserved.

'; this.insertTarget = document.querySelector('#cmsBody .subscription') || document.querySelector('#cmsBody .inner'); }; BodyAdIMSWithCCE.prototype = Object.create(BodyAdContent.prototype); BodyAdIMSWithCCE.prototype.activate = function () { refreshGam('InArtSpecialLink'); } // global reference window.itm = itm; //entry point BodyAdEventBase.polyfill(); const bodyAdManager = BodyAdManager.getInstance(); bodyAdManager.addEventListener(BodyAdManager.EVENTS.READY, function (ev) { bodyAdManager.loadAdvertise(); }); bodyAdManager.init(); })();
�X�|���T�[����̂��m�点PR

���ڂ̃e�[�}

Microsoft  WindowsőO2025
AI for GWjAO
[R[h^m[R[h Zg by IT - ITGWjArWlX̒SŊ􂷂gD
Cloud Native Central by IT - XP[uȔ\͂gD
�V�X�e���J���m�E�n�E �y�����i�r�zPR
���Ȃ��ɂ������߂̋L��PR

RSS�ɂ‚���

�A�C�e�B���f�B�AID�ɂ‚���

���[���}�K�W���o�^

��IT�̃��[���}�K�W���́A �������A���ׂĖ����ł��B���Ѓ��[���}�K�W�������w�ǂ��������B