C# 联接datatable和collection并在LINQ C中返回一个列表#
我有一个数据表C# 联接datatable和collection并在LINQ C中返回一个列表#,c#,linq,list,datatable,C#,Linq,List,Datatable,我有一个数据表 **Code value stdcode desc**** code1 value1 abcd12 abcjkdh code2 value2 cdfg34 sdfiuysd . . . . . . . . 我有一张单子 **stdcode desc** abcd12 sdfsd fhry67 uisydif
**Code value stdcode desc****
code1 value1 abcd12 abcjkdh
code2 value2 cdfg34 sdfiuysd
. . . .
. . . .
我有一张单子
**stdcode desc**
abcd12 sdfsd
fhry67 uisydif
我想在stdcode上使用linq连接这两个
请提供解决方案
我已经尝试将datatable转换为list,并尝试将两者结合起来
List<stdcode> listCodes = new List<stdcode>();
listCodes = (from row in dataTable.AsEnumerable() select row).ToList<stdcode>();
List<stdcode> ResultCodes = from codes in stdallCodes join dataCode in listCodes on codes.stdcode equals dataCode.stdcode select codes;
List listCodes=新列表();
listCodes=(从dataTable.AsEnumerable()中的行选择行);
List ResultCodes=from stdallCodes中的代码在codes上的listCodes中加入dataCode。stdcode等于dataCode。stdcode选择代码;
不转换时出现一些错误
我想要一个包含stdcode、code和value列的结果列表请尝试以下操作:-
编辑
var query1 = listCodes.Join(query, x => x.STDCode, y => y.STDCode, (x, y) => new{
y.Code,
y.Value,
y.STDCode,
y.Description,
x.MyField
} );
尝试更简单的方法:
class Program
{
static void Main(string[] args)
{
DataTable dtName = new DataTable();
dtName.Columns.Add("Code");
dtName.Columns.Add("FirstName");
dtName.Columns.Add("lastName");
dtName.Rows.Add("1", "Abhishek", "Shukla");
dtName.Rows.Add("2", "Deepak", "Singh");
dtName.Rows.Add("3", "Vinay", "Negi");
DataTable dtHomeTowns = new DataTable();
dtHomeTowns.Columns.Add("Code");
dtHomeTowns.Columns.Add("HomeTown");
dtHomeTowns.Columns.Add("State");
dtHomeTowns.Rows.Add("1", "Ajmer", "Rajasthan");
dtHomeTowns.Rows.Add("2", "Bhiwadi", "Rajasthan");
dtHomeTowns.Rows.Add("3", "Guwahati", "Orissa");
var list = (from names in dtName.AsEnumerable()
join town in dtHomeTowns.AsEnumerable() on names["Code"] equals town["Code"]
select new
{
Code = names["Code"],
FirstName = names["FirstName"],
lastName = names["lastName"],
HomeTown = town["HomeTown"],
State = town["State"],
}).ToList();
foreach (var item in list)
{
Console.WriteLine(String.Format("Code:{0}, FirstName: {1},LastName : {2},HomeTown:{3},State:{4}", item.Code, item.FirstName, item.lastName, item.HomeTown, item.State));
}
Console.ReadKey();
}
}
希望这有帮助
stdcode
是您编写的某种类型吗?如何将数据表行转换为stdcode
?您得到的确切错误是什么?当然可以..只想问..如果要在结果中包含此字段,我在listCodes中有另一个字段ID??那么你将如何改变?@Shabz请参见编辑。例如,新字段是MyField
。如何在linq中按计数对结果进行分组。我想按计数对结果进行分组。我想按stdcode的计数对结果进行分组。请参阅我在顶部的问题try this-var items=list.GroupBy(n=>n.code,(key,values)=>new{code=key,count values.count(),Val=values.ToList()});
var query1 = listCodes.Join(query, x => x.STDCode, y => y.STDCode, (x, y) => new{
y.Code,
y.Value,
y.STDCode,
y.Description,
x.MyField
} );
class Program
{
static void Main(string[] args)
{
DataTable dtName = new DataTable();
dtName.Columns.Add("Code");
dtName.Columns.Add("FirstName");
dtName.Columns.Add("lastName");
dtName.Rows.Add("1", "Abhishek", "Shukla");
dtName.Rows.Add("2", "Deepak", "Singh");
dtName.Rows.Add("3", "Vinay", "Negi");
DataTable dtHomeTowns = new DataTable();
dtHomeTowns.Columns.Add("Code");
dtHomeTowns.Columns.Add("HomeTown");
dtHomeTowns.Columns.Add("State");
dtHomeTowns.Rows.Add("1", "Ajmer", "Rajasthan");
dtHomeTowns.Rows.Add("2", "Bhiwadi", "Rajasthan");
dtHomeTowns.Rows.Add("3", "Guwahati", "Orissa");
var list = (from names in dtName.AsEnumerable()
join town in dtHomeTowns.AsEnumerable() on names["Code"] equals town["Code"]
select new
{
Code = names["Code"],
FirstName = names["FirstName"],
lastName = names["lastName"],
HomeTown = town["HomeTown"],
State = town["State"],
}).ToList();
foreach (var item in list)
{
Console.WriteLine(String.Format("Code:{0}, FirstName: {1},LastName : {2},HomeTown:{3},State:{4}", item.Code, item.FirstName, item.lastName, item.HomeTown, item.State));
}
Console.ReadKey();
}
}