Please find the solution
class A
{
public string aFieldOne { get; set; }
public string aFieldTwo { get; set; }
public string aFieldThree { get; set; }
}
class B
{
public string bFieldOne { get; set; }
public string bFieldTwo { get; set; }
public string bFieldThree { get; set; }
}
public void joinUsingLinq()
{
List<A> listA = new List<A>();
listA.Add(new A { aFieldOne = "a*", aFieldTwo = "123a", aFieldThree = "aaa123" });
listA.Add(new A { aFieldOne = "bbb", aFieldTwo = "123a", aFieldThree = "aaa123" });
listA.Add(new A { aFieldOne = "ccc", aFieldTwo = "123a", aFieldThree = "aaa123" });
List<B> listB = new List<B>();
listB.Add(new B { bFieldOne = "aaa", bFieldTwo = "b123a", bFieldThree = "abaa123" });
listB.Add(new B { bFieldOne = "aab", bFieldTwo = "b123a", bFieldThree = "abaa123" });
listB.Add(new B { bFieldOne = "aac", bFieldTwo = "b123a", bFieldThree = "abaa123" });
listB.Add(new B { bFieldOne = "bbb", bFieldTwo = "b123-a", bFieldThree = "abaa123" });
listB.Add(new B { bFieldOne = "ccc", bFieldTwo = "b123-a", bFieldThree = "abaa123" });
var a = from dataA in listA
from dataB in listB
let matcher = new System.Text.RegularExpressions.Regex(WildcardToRegex(dataA.aFieldOne))
let matches = matcher.Matches(dataB.bFieldOne)
where matches.Count>0
select new
{
dataA.aFieldOne,
dataA.aFieldTwo,
dataA.aFieldThree,
dataB.bFieldOne,
dataB.bFieldTwo,
dataB.bFieldThree
};
foreach (var x in a)
Console.WriteLine("aFieldOne: {0}, aFieldTwo:{1}, aFieldThree:{2} bFieldOne: {3}, bFieldTwo:{4}, bFieldThree:{5}",
x.aFieldOne, x.aFieldTwo, x.aFieldThree, x.bFieldOne, x.bFieldTwo, x.bFieldThree);
}
public static string WildcardToRegex(string pattern)
{
return "^" + System.Text.RegularExpressions.Regex.Escape(pattern).
Replace("\\*", ".*").
Replace("\\?", ".") + "$";
}
Output:
aFieldOne: a*, aFieldTwo:123a, aFieldThree:aaa123 bFieldOne: aaa, bFieldTwo:b123a, bFieldThree:abaa123
aFieldOne: a*, aFieldTwo:123a, aFieldThree:aaa123 bFieldOne: aab, bFieldTwo:b123a, bFieldThree:abaa123
aFieldOne: a*, aFieldTwo:123a, aFieldThree:aaa123 bFieldOne: aac, bFieldTwo:b123a, bFieldThree:abaa123
aFieldOne: bbb, aFieldTwo:123a, aFieldThree:aaa123 bFieldOne: bbb, bFieldTwo:b123-a, bFieldThree:abaa123
aFieldOne: ccc, aFieldTwo:123a, aFieldThree:aaa123 bFieldOne: ccc, bFieldTwo:b123-a, bFieldThree:abaa123
Press any key to continue . . .