加入linq结果不显示我 [英] Join in linq result not show according me
本文介绍了加入linq结果不显示我的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
亲爱的先生
我正在使用linq我的查询是
var query =( from c in Categories
join s in c.Id上的子类别等于s.Category_id
orderby c.Id
select new
{
cateid = c.Id,
catename = c.Name,
subcateid = s.Id,
subcatename = s。名称,
})。Distinct()。ToList();
query.Dump();
我的结果是
cateid catename subcateid subatename
1模块化办公家具40 45mm面板基座系统
1模块化办公家具41 60mm面板基座系统
1模块化办公家具42 75mm瓷砖底座系统
但我想要那个模块化办公家具和id 1不重复
cateid catename subcateid subatename
1模块化办公家具40 45mm面板基座系统
null 41 60mm面板基本系统
null 42 75mm平铺基础系统
添加代码块 - OriginalGriff [/ edit]
解决方案
您获得的结果是预期的结果。数据库引擎一直返回结果。你无法避免得到记录的重复部分。
你可以得到任何你想要的结果的唯一方法是你的查询返回每条记录或你不知道什么不想重复,然后有子记录的子集合。
....选择新的
{
categoryId = c。 Id,
categoryName = c.Name,
subcategories =(来自子类别中的s
其中s.Category_id = c.Id
选择新的
{
subCategoryId = s.Id,
subCategoryName = s.Name
})
})。ToList();
这将导致结果在每个类别记录的子类别集合中。
另一种方法是使用这样的查询:
var qry = 来自 c 类别 join
s in 子类别。选择((a,x)= > new {cateid = a.cateid,index = x + 1,subcateid = a.subcateid,subcatename = a.subcatename})c.cateid上的
等于s.cateid
选择 new
{
cateid = s.index == 1 ? c.cateid.ToString(): string .Empty,
catename = s.index == 1 ? c.catename: string .Empty,
subcateid = s.subcateid,
subcatename = s.subcatename
};
结果:
cateid catename subcateid subatename
1模块化办公家具40 45mm面板基座系统
41 60mm面板基座系统
42 75mm面板基座系统void Main()
{
List< category>> Categories = new 列表< category>
{
new 类别( 1 , 模块化办公家具)
};
List< subcategory>子类别= 新列表<子类别>
{
new 子类别( 40 , 1 , 45mm面板基础系统),
new 子类别( 41 , 1 , 60mm Panel Base System),
new subcategory( 42 , 1 , 75mm面板基础系统)
};
var qry = 来自 c in 类别 join
s 子类别。选择((a,x) = > new {cateid = a.cateid,index = x + 1,subcateid = a.subcateid ,subcatename = a.subcatename})c.cateid上的
等于s.cateid
选择 new
{
cateid = s.index == 1 ? c.cateid.ToString(): string .Empty,
catename = s.index == 1 ? c.catename: string .Empty,
subcateid = s.subcateid,
subcatename = s.subcatename
};
qry.Dump();
}
// 在此处定义其他方法和类
class category
{
private int cid = 0 ;
private string cn = string .Empty;
public 类别( int _cid, string _cn)
{
cid = _cid;
cn = _cn;
}
public int cateid
{
get { return cid;}
set {cid = value ;}
}
public string catename
{
get { return cn;}
set {cn = value ;}
}
}
class 子类别
{
private string scn = string .Empty;
private int scid = 0 ;
private int cid = 0 ;
public 子类别( int _scid, int _cid, string _scn)
{
scid = _scid;
cid = _cid;
scn = _scn;
}
public int cateid
{
get { return cid;}
set {cid = value ;}
}
public int subcateid
{
get { return scid;}
set {scid = value ;}
}
public string subatename
{
get { return scn;}
设置 {scn = 价值;}
}
}
Dear Sir
I m working on linq my query is
var query = (from c in Categories
join s in Subcategories on c.Id equals s.Category_id
orderby c.Id
select new
{
cateid= c.Id,
catename= c.Name,
subcateid= s.Id,
subcatename= s.Name,
}).Distinct().ToList();
query.Dump();
my result is
cateid catename subcateid subcatename
1 Modular Office Furniture 40 45mm Panel Base System
1 Modular Office Furniture 41 60mm Panel Base System
1 Modular Office Furniture 42 75mm Tile Base System
But i want that Modular Office Furniture and id 1 is not repeat
cateid catename subcateid subcatename
1 Modular Office Furniture 40 45mm Panel Base System
null 41 60mm Panel Base System
null 42 75mm Tile Base System
[edit]Code block added - OriginalGriff[/edit]
解决方案
The result you're getting is what is expected. Database engines return results like that all the time. You cannot avoid getting the repeated parts of the records.
The only way you can get a result anything like you want is if your query returns each record or what you don't want repeated, and then there is a child collection of your sub records.
....select new { categoryId = c.Id, categoryName = c.Name, subcategories = (from s in Subcategories where s.Category_id = c.Id select new { subCategoryId = s.Id, subCategoryName = s.Name }) }).ToList();
This will result in a collection of subcategories in each category record.
Another way is to use query like this:
var qry = from c in Categories join s in Subcategories.Select((a,x) => new{cateid = a.cateid, index=x+1, subcateid = a.subcateid, subcatename = a.subcatename}) on c.cateid equals s.cateid select new { cateid = s.index==1 ? c.cateid.ToString() : string.Empty, catename = s.index==1 ? c.catename : string.Empty, subcateid = s.subcateid, subcatename = s.subcatename };
Result:
cateid catename subcateid subcatename 1 Modular Office Furniture 40 45mm Panel Base System 41 60mm Panel Base System 42 75mm Panel Base System
Complete sample code for LinqPad[^]:
void Main() { List<category>> Categories = new List<category> { new category(1, "Modular Office Furniture") }; List<subcategory> Subcategories = new List<subcategory> { new subcategory(40, 1, "45mm Panel Base System"), new subcategory(41, 1, "60mm Panel Base System"), new subcategory(42, 1, "75mm Panel Base System") }; var qry = from c in Categories join s in Subcategories.Select((a,x) => new{cateid = a.cateid, index=x+1, subcateid = a.subcateid, subcatename = a.subcatename}) on c.cateid equals s.cateid select new { cateid = s.index==1 ? c.cateid.ToString() : string.Empty, catename = s.index==1 ? c.catename : string.Empty, subcateid = s.subcateid, subcatename = s.subcatename }; qry.Dump(); } // Define other methods and classes here class category { private int cid = 0; private string cn = string.Empty; public category(int _cid, string _cn) { cid = _cid; cn = _cn; } public int cateid { get{return cid;} set{cid = value;} } public string catename { get{return cn;} set{cn = value;} } } class subcategory { private string scn = string.Empty; private int scid = 0; private int cid = 0; public subcategory(int _scid, int _cid, string _scn) { scid = _scid; cid = _cid; scn = _scn; } public int cateid { get{return cid;} set{cid = value;} } public int subcateid { get{return scid;} set{scid = value;} } public string subcatename { get{return scn;} set{scn = value;} } }
这篇关于加入linq结果不显示我的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文