C# Linq通过一个列表的列表进行分组并从两个列表中进行选择
所以我现在很难在Linq的团队中找到自己的头绪,实际上我想从海盗那里获取id和船上的所有信息,理想的情况是将其放入IEnumerable数据行列表中(数据行被隐藏了…) 您可以尝试以下方法:C# Linq通过一个列表的列表进行分组并从两个列表中进行选择,c#,linq,C#,Linq,所以我现在很难在Linq的团队中找到自己的头绪,实际上我想从海盗那里获取id和船上的所有信息,理想的情况是将其放入IEnumerable数据行列表中(数据行被隐藏了…) 您可以尝试以下方法: var pirates = new List<Pirate>(); // or wherever your pirates will come from var data = from p in pirates let pirateId = p.Id
var pirates = new List<Pirate>(); // or wherever your pirates will come from
var data = from p in pirates
let pirateId = p.Id
from s in p.Ships
select new
{
PirateId = pirateId,
Name = s.Name,
Class = s.ShipClass,
AvastyMast = s.AvastyMast
};
然后像这样使用它:
var pirates = new List<Pirate>(); // or wherever your pirates will come from
var dataTable = new DataTable(); // or wherever your DataTable will come from
var data = from p in pirates
let pirateId = p.Id
from s in p.Ships
select CreateDataRow(dataTable , pirateId, s.Name, s.ShipClass, s.AvastyMast);
var=new List();//或者你的海盗从哪里来
var dataTable=新dataTable();//或者无论数据表来自何处
var数据=从p到p
设Id=p.Id
从p.船上的s
选择CreateDataRow(dataTable、pirateId、s.Name、s.ShipClass、s.AvastyMast);
您可以尝试以下方法:
var pirates = new List<Pirate>(); // or wherever your pirates will come from
var data = from p in pirates
let pirateId = p.Id
from s in p.Ships
select new
{
PirateId = pirateId,
Name = s.Name,
Class = s.ShipClass,
AvastyMast = s.AvastyMast
};
然后像这样使用它:
var pirates = new List<Pirate>(); // or wherever your pirates will come from
var dataTable = new DataTable(); // or wherever your DataTable will come from
var data = from p in pirates
let pirateId = p.Id
from s in p.Ships
select CreateDataRow(dataTable , pirateId, s.Name, s.ShipClass, s.AvastyMast);
var=new List();//或者你的海盗从哪里来
var dataTable=新dataTable();//或者无论数据表来自何处
var数据=从p到p
设Id=p.Id
从p.船上的s
选择CreateDataRow(dataTable、pirateId、s.Name、s.ShipClass、s.AvastyMast);
试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Pirate> pirates = new List<Pirate>() {
new Pirate() { id = "1" , Ships = new List<Ship>(){
new Ship() { name = "Maria", _class = "BattleShip", avastyemast = "You Sunk My Battleship"},
new Ship() { name = "Clara", _class = "Scout", avastyemast = "You Sunk My Battleship"}
}
},
new Pirate() { id = "2" , Ships = new List<Ship>() {
new Ship() { name = "Boon", _class = "Sub", avastyemast = "You Sunk My Battleship"},
new Ship() { name = "Slimer", _class = "Scout", avastyemast = "You Sunk My Battleship"}
}
}
};
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(string));
dt.Columns.Add("name", typeof(string));
dt.Columns.Add("class", typeof(string));
dt.Columns.Add("avastyemast", typeof(string));
foreach (Pirate pirate in pirates)
{
foreach(Ship ship in pirate.Ships)
{
dt.Rows.Add(new string[] {
pirate.id,
ship.name,
ship._class,
ship.avastyemast
});
}
}
//using linq
var newRows = pirates.Select(x => x.Ships.Select(y => new List<object>() {x.id, y.name, y._class, y.avastyemast})).SelectMany(z => z).ToList();
foreach (var row in newRows)
{
dt.Rows.Add(row);
}
}
}
public class Pirate
{
public string id {get;set;}
public List<Ship> Ships {get;set;}
}
public class Ship
{
public string name {get;set;}
public string _class {get;set;}
public string avastyemast {get;set;}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统数据;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
列表海盗=新列表(){
new Pirate(){id=“1”,Ships=new List(){
新战舰(){name=“Maria”,“战舰”,avastyemast=“你击沉了我的战舰”},
新战舰(){name=“Clara”、\u class=“Scout”、avastyemast=“你击沉了我的战舰”}
}
},
new Pirate(){id=“2”,Ships=new List(){
新战舰(){name=“Boon”,\u class=“Sub”,avastyemast=“你击沉了我的战舰”},
新战舰(){name=“Slimer”、\u class=“Scout”、avastyemast=“你击沉了我的战舰”}
}
}
};
DataTable dt=新的DataTable();
添加(“id”,类型(字符串));
添加(“名称”,类型(字符串));
添加(“类”,类型(字符串));
添加(“avastyemast”,typeof(string));
foreach(海盗中的海盗)
{
foreach(海盗船,海盗船)
{
dt.Rows.Add(新字符串[]){
海盗身份证,
ship.name,
船舱,
船型
});
}
}
//使用linq
var newRows=pirates.Select(x=>x.Ships.Select(y=>newlist(){x.id,y.name,y.\u class,y.avastyemast})).SelectMany(z=>z.ToList();
foreach(新行中的var行)
{
dt.行。添加(行);
}
}
}
公营海盗
{
公共字符串id{get;set;}
公共列表{get;set;}
}
公船
{
公共字符串名称{get;set;}
公共字符串_类{get;set;}
公共字符串avastyemast{get;set;}
}
}
试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Pirate> pirates = new List<Pirate>() {
new Pirate() { id = "1" , Ships = new List<Ship>(){
new Ship() { name = "Maria", _class = "BattleShip", avastyemast = "You Sunk My Battleship"},
new Ship() { name = "Clara", _class = "Scout", avastyemast = "You Sunk My Battleship"}
}
},
new Pirate() { id = "2" , Ships = new List<Ship>() {
new Ship() { name = "Boon", _class = "Sub", avastyemast = "You Sunk My Battleship"},
new Ship() { name = "Slimer", _class = "Scout", avastyemast = "You Sunk My Battleship"}
}
}
};
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(string));
dt.Columns.Add("name", typeof(string));
dt.Columns.Add("class", typeof(string));
dt.Columns.Add("avastyemast", typeof(string));
foreach (Pirate pirate in pirates)
{
foreach(Ship ship in pirate.Ships)
{
dt.Rows.Add(new string[] {
pirate.id,
ship.name,
ship._class,
ship.avastyemast
});
}
}
//using linq
var newRows = pirates.Select(x => x.Ships.Select(y => new List<object>() {x.id, y.name, y._class, y.avastyemast})).SelectMany(z => z).ToList();
foreach (var row in newRows)
{
dt.Rows.Add(row);
}
}
}
public class Pirate
{
public string id {get;set;}
public List<Ship> Ships {get;set;}
}
public class Ship
{
public string name {get;set;}
public string _class {get;set;}
public string avastyemast {get;set;}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统数据;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
列表海盗=新列表(){
new Pirate(){id=“1”,Ships=new List(){
新战舰(){name=“Maria”,“战舰”,avastyemast=“你击沉了我的战舰”},
新战舰(){name=“Clara”、\u class=“Scout”、avastyemast=“你击沉了我的战舰”}
}
},
new Pirate(){id=“2”,Ships=new List(){
新战舰(){name=“Boon”,\u class=“Sub”,avastyemast=“你击沉了我的战舰”},
新战舰(){name=“Slimer”、\u class=“Scout”、avastyemast=“你击沉了我的战舰”}
}
}
};
DataTable dt=新的DataTable();
添加(“id”,类型(字符串));
添加(“名称”,类型(字符串));
添加(“类”,类型(字符串));
添加(“avastyemast”,typeof(string));
foreach(海盗中的海盗)
{
foreach(海盗船,海盗船)
{
dt.Rows.Add(新字符串[]){
海盗身份证,
ship.name,
船舱,
船型
});
}
}
//使用linq
var newRows=pirates.Select(x=>x.Ships.Select(y=>newlist(){x.id,y.name,y.\u class,y.avastyemast})).SelectMany(z=>z.ToList();
foreach(新行中的var行)
{
dt.行。添加(行);
}
}
}
公营海盗
{
公共字符串id{get;set;}
公共列表{get;set;}
}
公船
{
公共字符串名称{get;set;}
公共字符串_类{get;set;}
公共字符串avastyemast{get;set;}
}
}
您的问题不是很清楚。什么是输入,什么是预期的输出?从海盗那里获取id和船上的所有信息,理想的情况是放入IEnumerable列表。
What?您的代码不会编译<代码>类是保留关键字。这些是私人领域吗?或者它们应该是公共属性?做了一些小的编辑,很抱歉造成混乱,我只是把这两个类作为我正在处理的对象的一个例子。将立即进行更多编辑。DataRow
应包含哪些字段?您的问题不太清楚。Wh