c# LINQ to dataset IN子句包含,group, min
本文关键字:包含 group min 子句 IN LINQ to dataset | 更新日期: 2023-09-27 18:17:41
我是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。
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)
任何指示将是最感激的。谢谢。
根据异常和堆栈跟踪判断,您为查询中的endID字段指定的类型与DataTable中该列的DataType不匹配。它们必须匹配——您不能使用Field方法将值强制转换为不同的类型。
我使用Linqer编写了这段代码:
from t in db.Table // your C# table / collection here, of course
where t.ExId == stackoverflow.ExId
&& (new int[] {1, 2, 3 }).Contains(t.SmId)
group t by new { t.SmId } into g
select new {
SmId = g.Key.SmId,
minEntID = g.Min(p => p.EntId)
}