Check if a given grid is a valid Sudoku
Nice use of Func

I don't like the use of row and column in Validate and that is not really what it is  

Looks like you call GetNumberFromSquare more than you need to.  

Consider a byte[,] ba = new byte[9, 9]; array and use 0 for blank.

A little more compact  

public class Sudoku2
{
    byte[,] gridy = new byte[9, 9] { { 0, 0, 0, 1, 4, 0, 0, 2, 0 },
                                     { 0, 0, 6, 0, 0, 0, 0, 0, 0 },
                                     { 0, 0, 0, 0, 0, 6, 0, 0, 0 },
                                     { 0, 0, 1, 0, 0, 0, 0, 0, 0 },
                                     { 0, 6, 7, 0, 0, 0, 0, 0, 9 },
                                     { 0, 0, 0, 0, 0, 0, 8, 1, 0 },
                                     { 0, 3, 0, 0, 0, 0, 0, 0, 6 },
                                     { 5, 0, 0, 0, 0, 7, 0, 0, 0 },
                                     { 0, 0, 0, 5, 0, 0, 0, 7, 0 },
                                    };
    public bool Validate(byte[,] grid)
    {
        for (int i = 0; i &lt; 9; i++)
        {
            bool[] row = new bool[10];
            bool[] col = new bool[10];

            for (int j = 0; j &lt; 9; j++)
            {
                if(row[grid[i,j]] &amp; grid[i, j] &gt; 0)
                {
                    return false;
                }
                row[grid[i, j]] = true;

                if (col[grid[j, i]] &amp; grid[j, i] &gt; 0)
                {
                    return false;
                }
                col[grid[j, i]] = true;

                if ((i + 3) % 3 == 0 &amp;&amp; (j + 3) % 3 == 0)
                {
                    bool[] sqr = new bool[10];
                    for (int m = i; m &lt; i + 3; m++)
                    {
                        for (int n = j; n &lt; j + 3; n++)
                        {
                            if (sqr[grid[m, n]] &amp; grid[m, n] &gt; 0)
                            {
                                return false;
                            }
                            sqr[grid[m, n]] = true;
                        }
                    }
                }

            }
        }
        return true;
    }

    public Sudoku2()
    {
        bool good = Validate(gridy);
    }
    public Sudoku2(byte[,] grid)
    {
        bool good = Validate(grid);
    }
}