Я новичок в LINQ, но пытаюсь решить сложную задачу сразу же. Я пытаюсь сделать LINQ для набора данных и эмулировать следующий запрос ...
SELECT smID, MIN(entID) FROM table
WHERE exID = :exID
AND smID IN (1,2,3,4,5,6,7,8, etc)
GROUP BY smID
Код, который у меня есть, выглядит следующим образом ...
DataTable dt = ds.Tables["myTable"];
var query =
from g in dt.AsEnumerable()
where g.Field<string>("exID") == exID
&& smIDs.Contains(g.Field<string>("smID"))
group g by g.Field<string>("smID") into rowGroup
select new
{
smID = rowGroup.Key,
minEntID = rowGroup.Min(g => g.Field<int>("entID"))
};
exID - это строковая переменная в методе, а smIDs - это список строк, также созданных ранее в методе. Я создал следующий код, чтобы попытаться увидеть мои результаты, и он выдает ошибку «System.InvalidCastException» в query.Count ...
if (query.Count() > 0)
{
foreach (var item in query)
{
string s = item.smID;
int i = (int)item.minEntID;
}
}
Мне не удалось понять, что я делаю не так.
VS указывает на ...
minEntID = rowGroup.Min(g => g.Field<int>("entID"))
Это первые две строки трассировки стека ...
at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value)
at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName)
Любые указатели будут наиболее ценными Спасибо.