【发布时间】:2011-12-13 23:48:52
【问题描述】:
我是 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 是该方法之前创建的字符串列表。我创建了以下代码来尝试查看我的结果,它在 query.Count 处引发“System.InvalidCastException”错误...
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)
任何指针将不胜感激。谢谢。
【问题讨论】:
-
您的意思是写
where而不是第一个&&? -
另外,你可以写
…group g by g.Field<string>("smID")…。 -
是的,很抱歉第一个 && 是哪里
-
数据表中smID是string还是int?在您的原始查询中,它看起来像一个 int,但在您的 LINQ 查询中,您使用的是字符串。
-
@CollinK - 从技术上讲,它是一个字符串。它永远不会是这样,但数据库将其存储为 varchar,我们将其带到数据集定义中。
标签: c# linq group-by contains linq-to-dataset