Ваш первый запрос возвращает перечислимое значений (идентификаторов отделов) вместо перечисляемого строк данных (как во втором запросе).
Поскольку IEnumerable<Nullable<long>>
не является подтипом IEnumerable<DataRow>
, оператор as
возвращает ноль.
(Как примечание: с использованием обычного приведения вместо as
дало бы вам InvalidCastException
, что более полезно при поиске ошибок, чем просто возврат null
.)
РЕДАКТИРОВАТЬ: Если вам действительно нужен DataTable в конце, я думаю, вам придется создать его вручную (не проверено):
var dept_list = ((from map in DtMapGuestDepartment.AsEnumerable()
where map.Field<Nullable<long>>("Guest_Id") == 174
select map.Field<Nullable<long>>("Department_id")).Distinct())
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Department_id", typeof(long?)));
foreach (long? dept in dept_list) {
dt.Rows.Add(dept);
}