Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#LINQ到子句contains、group、min中的数据集_C#_Linq_Group By_Contains_Linq To Dataset - Fatal编程技术网

c#LINQ到子句contains、group、min中的数据集

c#LINQ到子句contains、group、min中的数据集,c#,linq,group-by,contains,linq-to-dataset,C#,Linq,Group By,Contains,Linq To Dataset,我是新来林克的,但我正试图一下子解决一个棘手的问题。我正在尝试对数据集执行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()

我是新来林克的,但我正试图一下子解决一个棘手的问题。我正在尝试对数据集执行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"))
    };
我一直不知道我做错了什么

VS指向

minEntID = rowGroup.Min(g => g.Field<int>("entID"))
任何指点都将不胜感激。谢谢。

我以前经常想到以下代码:

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)
}
我曾经想出过这样的代码:

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)
}

根据异常和堆栈跟踪判断,您为查询中的endID字段指定的类型与DataTable中该列的数据类型不匹配。这些必须匹配--您不能使用Field方法将值强制转换为其他类型。

根据异常和堆栈跟踪判断,您在查询中为endID字段指定的类型与DataTable中该列的数据类型不匹配。这些必须匹配--您不能使用Field方法将值强制转换为其他类型。

您是想在其中写入
而不是第一个
&&
?此外,您可以只写入
…按g.Field分组g(“smID”)…
。是的,很抱歉,第一个&&是数据表中的smID是字符串还是int?在原始查询中,它看起来像一个int,但在LINQ查询中,您使用的是字符串。@collik-从技术上讲,它是一个字符串。它永远不会是这样,但DB将其存储为varchar,我们将其添加到数据集定义中。您是否打算在其中写入
而不是第一个
&&
?此外,您可以只写入
…group g by g.Field(“smID”)…
。是的,很抱歉,第一个(&I)是数据表中的字符串或int?在原始查询中,它看起来像一个int,但在LINQ查询中,您使用的是字符串。@collik-从技术上讲,它是一个字符串。它永远不会是这样的,但DB将其存储为varchar,我们将其添加到数据集定义中。您是正确的。我将'code'minEntID=rowGroup.Min(g=>g.Field(“entID”))更改为'code'minEntID=rowGroup.Min(g=>Utilities.ConvertFieldtoInt(g.Field(“entID”))helper方法将对象转换为int。感谢您的帮助。作为一个新手,我太专注于LINQ了,以至于无法从盒子外面寻找与之无关的错误。你是对的。我将'code'minEntID=rowGroup.Min(g=>g.Field(“entID”))更改为'code'minEntID=rowGroup.Min(g=>Utilities.ConvertFieldtoInt(g.Field(“entID”))helper方法将对象转换为int。感谢您的帮助。作为一个新手,我太专注于LINQ了,以至于无法从盒子外面寻找与之无关的错误。
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)
}