我想从数据表中获取前 n 条记录。
我不想运行我已经知道的循环。
我正在尝试这样做
DataTable dt = dtResult.AsEnumerable().Take(n)
Run Code Online (Sandbox Code Playgroud)
是正确的方法..?
使这“n条记录”位于另一个数据表中的过程是什么?
我正在尝试在两个数据表上使用LINQ应用左外连接.当我尝试调试并查看结果变量中包含的数据时,我收到下面列出的异常:
System.ArgumentException:值不能为null.参数名称:行
码:
private DataTable DataTable1()
{
DataRow dataRow = null;
DataTable dt1 = new DataTable();
dt1.Columns.Add("EmpId");
dt1.Columns.Add("EmpName");
dataRow = dt1.NewRow();
dataRow["EmpId"] = "EMP001";
dataRow["EmpName"] = "Ajaj Kumar";
dt1.Rows.Add(dataRow);
dataRow = dt1.NewRow();
dataRow["EmpId"] = "EMP002";
dataRow["EmpName"] = "Sanjay Gupta";
dt1.Rows.Add(dataRow);
dataRow = dt1.NewRow();
dataRow["EmpId"] = "EMP003";
dataRow["EmpName"] = "Ashish Charan";
dt1.Rows.Add(dataRow);
dt1.AcceptChanges();
return dt1;
}
private DataTable DataTable2()
{
DataRow dr = null;
DataTable dt2 = new DataTable();
dt2.Columns.Add("EmpId");
dt2.Columns.Add("Salary");
dr = dt2.NewRow();
dr["EmpId"] = "EMP001";
dr["Salary"] = "50000";
dt2.Rows.Add(dr); …Run Code Online (Sandbox Code Playgroud) 我有这样的数据表:
我想将此表分组为FIELD A和FIELD B,我的组的第三个字段应该是FIELD C的列表,但必须按ID字段进行分组.
最后,结果应该是这样的:
First Field | Second Field | Third Field
------------+--------------+----------------
5 | XXXX |(8) (2,6,3) (9)
5 | KKKK |(8,3)
Run Code Online (Sandbox Code Playgroud)
第三个字段必须是列表列表.
我怎么能用LINQ做到这一点?
到目前为止我试过这个:
var trytogroup = (from p in datatable.AsEnumerable()
group p by new
{
ID = p["Id"].ToLong(),
FieldA = p["FieldA"].ToLong(),
FieldB = p["FieldB"].ToString()
} into g
select new
{
FirstField = g.Key.FieldA,
SecondField = g.Key.FieldB,
ThirdField = datatable.AsEnumerable().Where(p => p["FieldA"].ToLong() == g.Key.FieldA && p["FieldB"].ToString() == g.Key.FieldB).Select(p => p["FieldC"].ToLong()).GroupBy(x => x["Id"].ToLong()).Distinct().ToList()
});
Run Code Online (Sandbox Code Playgroud)
课程:
class Foo
{
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
名单
List<Foo> lst = new List<Foo>();
Run Code Online (Sandbox Code Playgroud)
数据表:
DataTable dt = GetFromDb ()....
Run Code Online (Sandbox Code Playgroud)
我想填写lst来自的记录dt.
我做过:
Array.ForEach(dt.AsEnumerable().ToArray(), y = > lst.Add(new Foo()
{
Id = int.Parse(y["id"].ToString()), Name = y["name"].ToString()
}));
Run Code Online (Sandbox Code Playgroud)
题 :
dt.AsEnumerable().Select(_ => fill lst )吗?我知道选择签名的一部分(在这种情况下)是Func<datarow,void>不会编译的
但是,除了我的丑陋方式之外,还有其他办法吗?
List<Employee> objEmpList = new List<Employee>();
for (int i = 0; i < 5; i++)
{
objEmpList.Add(new Employee(){ID=i, Name="aa" + i});
}
Run Code Online (Sandbox Code Playgroud)
我想使用linq或lambda表达式创建具有通用列表项的表作为行...如何做到?? ??我使用循环做了但我想用linq做那个..!
该示例查询应用程序使用了!运算符引用DataRow中的字段.
Option Strict Off
Imports System.Data
Imports System.Linq
Module Program
Public Sub Main()
Dim numbers() As Integer = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0}
Dim table As New DataTable("Numbers")
table.Columns.Add("number", GetType(Integer))
For Each n In numbers
table.Rows.Add(New Object() {n})
Next
Dim lowNums = From row In table.Rows _
Where row!number < 5
Select row
For Each x In lowNums
Console.WriteLine(x!number)
Next
End Sub
End Module
Run Code Online (Sandbox Code Playgroud)
是什么 !操作员叫?规则记录在哪里?
我在使用foreach构造中的var变量尝试循环查询对象时遇到错误.我正在将xml加载到数据集中,并出于明确原因对Linq执行数据集.请纠正我的错误.这是我的代码:
ds.ReadXml(fsReadXml);
DataTable myDataTable = ds.Tables[0];
var ordersQuery = myDataTable.AsEnumerable();
var subQuery = (from Geo03 in ordersQuery
select new
{
PARENTTYPE = Geo03.Field<String>("PARENTTYPE"),
PARENTINSTANCE = Geo03.Field<int>("PARENTINSTANCE"),
CHILDTYPE = Geo03.Field<String>("CHILDTYPE"),
CHILDINSTANCE = Geo03.Field<String>("CHILDINSTANCE"),
CHILDPOS = Convert.ToInt32(Geo03.Field<int>("CHILDPOS"))
});
XDocument doc = null;
foreach (var cin in subQuery)
{
}
Run Code Online (Sandbox Code Playgroud)
这是生成的错误:
System.InvalidCastException: Specified cast is not valid.
at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value)
at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName)
at SpectraWorkon.Program.<Main>b__0(DataRow Geo03) in c:\users\arun\documents\visual studio 2010\Projects\SpectraWorkon\SpectraWorkon\Program.cs:line 29
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at SpectraWorkon.Program.Main(String[] args) in c:\users\arun\documents\visual studio 2010\Projects\SpectraWorkon\SpectraWorkon\Program.cs:line 38 …Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码
IEnumerable<DataRow> query = from c in at.appointmentcalendars.AsEnumerable()
select c;
DataTable dt = query.CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)
但我得到以下错误
无法隐式转换
'System.Collections.Generic.IEnumerable<appointmentcalendar>'为'System.Collections.Generic.IEnumerable<System.Data.DataRow>'.存在显式转换(您是否错过了演员?)
我有一个包含多列的DataTable.如果某些列的值重复,我需要删除该行并对其添加数量.例如,跟随数据表
ITEM QTY
------------
1 20
2 10
2 10
3 20
Run Code Online (Sandbox Code Playgroud)
会成为:
ITEM QTY
-----------
1 20
2 20
3 20
Run Code Online (Sandbox Code Playgroud)
这就是我做的
var table = dt.AsEnumerable()
.GroupBy(row => row.Field("ITEM"))
.Select(group => group.First())
.CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)
它删除了额外的行但不添加数量.所以请在这方面帮助我.
在通过过滤将Datatable转换为Dataview时,查询我的SQL数据库以获取数据到Dataset,因为作为Linq的新手,我收到了基本的转换错误.
码:
DataView cktDv = (from clounceform in dsclounceForms.Tables["Table2"].AsEnumerable()
where clounceform.Field<string>("Form_FileType_ID").Equals("5")
select clounceform).CopyToDataTable().AsDataView();
Run Code Online (Sandbox Code Playgroud)
例外是
Unable to cast object of type 'System.Byte' to type 'System.String'.
System.Data.DataSetExtensions
at System.Data.DataRowExtensions.UnboxT`1.ReferenceField(Object value)
at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName)
at ClounceFormsSuite.Design.CreateFormDesign.<>c.<CreateForm>b__12_0(DataRow bounceform) in myprojectfolderpath\CreateFormDesign.xaml.cs:line 115
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Data.DataTableExtensions.LoadTableFromEnumerable[T](IEnumerable`1 source, DataTable table, Nullable`1 options, FillErrorEventHandler errorHandler)
at System.Data.DataTableExtensions.CopyToDataTable[T](IEnumerable`1 source)
at ClounceFormsSuite.Design.CreateFormDesign.CreateForm(String[] cktFileContent, String filePath, String formID) in myprojectfolderpath\CreateFormDesign.xaml.cs:line 114
at ClounceFormsSuite.Design.CreateFormDesign.UserControl_Loaded(Object sender, RoutedEventArgs e) in myprojectfolderpath\CreateFormDesign.xaml.cs:line 70
Run Code Online (Sandbox Code Playgroud)
我无法继续进行我实际上将字符串转换为int并给出了不同的错误,这会误导我更多当尝试转换为int时
DataView cktDataView = (from clounceform in dsclounceForms.Tables["Table2"].AsEnumerable()
where …Run Code Online (Sandbox Code Playgroud) linq ×10
linq-to-dataset ×10
c# ×9
datatable ×2
.net ×1
dataset ×1
linq-to-xml ×1
operators ×1
vb.net ×1
wpf ×1