Linq Excluyendo una columna

Todos: tengo un pequeño problema al intentar excluir una columna de una consulta de Linq. Lo que estoy tratando de hacer es encontrar todas las filas donde al menos una de las columnas, con la excepción de la columna ID, tenga datos. La columna ID está configurada en Incremento automático para que siempre tenga datos. Normalmente, la tabla de datos se carga desde algún otro almacén de datos (es decir, Excel, Access, CSV, etc.) y, a veces, algunas de estas filas no contienen datos. Mi trabajo actual es eliminar esa columna de ID de la tabla de datos (dt1) y luego agregarla nuevamente a la tabla de datos y volver a llenar la columna.Nota: El número total de columnas puede variar desde 10 hasta 100, por lo que cualquier solución debe ser dinámica.

En mi ejemplo a continuación, solo las filas 1 a 4 contienen datos en todas las columnas donde las filas 0 y 5 solo contienen datos en la columna ID. En dt2 solo quiero que se agreguen las filas 1 a 4. Entonces, mi pregunta es ¿cómo haría para eliminar la columna de ID de mi consulta LINQ a continuación?

Gracias por cualquier sugerencia constructiva de antemano!

private void LoadDataTable()
{
        DataTable dt1 = new DataTable();

        //Create three columns
            DataColumn dc = new DataColumn("ID", typeof(Int32));
            dc.AutoIncrement = true;
            dc.AllowDBNull = false;
            dc.AutoIncrementSeed = 1;
            dt1.Columns.Add(dc);
            dc.SetOrdinal(0);

            dc = new DataColumn("Item", typeof(String));
            dt1.Columns.Add(dc);

            dc = new DataColumn("Quantity", typeof(Int32));
            dt1.Columns.Add(dc);

        //Create items Array
            string[] items = new string[] { "Ford", "Chevy", "GMC", "Buick", "Toyota", "Honda", "Mercury"
                                                ,"Hyundai", "Rolls Royce", "BMW", "Mercedes Benz", "Bentley", "Porche"
                                                ,"Infinity", "Jaguar" };

        //Load Dummy data
            Random rnd = new Random();
            for (int i = 0; i < 5; i++)
            {
                DataRow dr = dt1.NewRow();

                if (i > 0 && i < 4)
                {
                    dr[1] = items[rnd.Next(i, items.Count())];
                    dr[2] = rnd.Next(i, 10000);

                    //Remove previously used Item from Array
                        items = items.Where(w => w != dr[1].ToString()).ToArray(); 
                }
                dt1.Rows.Add(dr);
            }

        //dt2 should only contain rows who have data in at least one column with the exception of the ID Column
            DataTable dt2 = dt1.Rows.Cast<DataRow>()
                            .Where(w => w.ItemArray.Any(field => !string.IsNullOrEmpty(field.ToString().Trim()) && !(field is DBNull)))
                            .CopyToDataTable();
}
Actualizar

Aquí está la solución gracias a Ivan Stoev

    //dt2 should only contain rows who have data in at least one column with the exception of the ID Column
    var columns = dt1.Columns.Cast<DataColumn>().Where(c => c.ColumnName != "ID").ToList();

    DataTable dt2 = dt1.Rows.Cast<DataRow>()
                    .Where(w => columns.Select(c => w[c]).Any(field => !string.IsNullOrEmpty(field.ToString().Trim()) && !(field is DBNull)))
                    .CopyToDataTable();

Respuestas a la pregunta(1)

Su respuesta a la pregunta