我的sql表有两列sizename和orderof。我想从该表中选择所有的sizenames,但按照命令的升序排列.Iam使用EF6和Linq to Entities
我曾经使用像这样的查询。但是它不工作(排序)
var sizedetails = (from size in enty.StyleSizes
where size.OurStyleID == ourstyleid
orderby size.Orderof
select new
{
size.SizeName
}).Distinct();
//var sizedetails = enty .StyleSizes.Where(u => u.OurStyleID == ourstyleid).Select(u => u.SizeName ).Distinct();
foreach (var sizedet in sizedetails)
{
dt.Columns.Add(sizedet.SizeName.Trim(), typeof(String));
}
我知道这可能已被问到了。但这些问题中没有提供的解决方案为我工作
答案 0 :(得分:3)
由于LINQ to Entities将您的查询转换为SQL,因此在Distinct
之前排序无效。问题是在Distinct
之后你无法访问订购所需的财产。
所以你需要一种替代方法,幸运的是GroupBy
方法 - 它类似于Distinct
但允许你访问共享相同密钥的元素的属性。因此,您可以根据某些聚合顺序排序结果(在您的情况下看起来像Min
是合适的):
var sizedetails = from size in enty.StyleSizes
where size.OurStyleID == ourstyleid
group size by size.SizeName into sizeGroup
orderby sizeGroup.Min(size => size.Orderof)
select new
{
SizeName = sizeGroup.Key
};
答案 1 :(得分:0)
I dint tried with DB but with in memory collection it gives be correct result .
这是我的课。
class StyleSizes
{
public int Orderof { get; set; }
public string SizeName { get; set; }
public int OurStyleID { get; set; }
}
// logic to ue orderby
var list = new List<StyleSizes> { new StyleSizes { Orderof=2,SizeName="B",OurStyleID=1 },
new StyleSizes { Orderof=11,SizeName="C" ,OurStyleID=2},
new StyleSizes { Orderof=9,SizeName="D" ,OurStyleID=1},
new StyleSizes { Orderof=9,SizeName="D" ,OurStyleID=1},
new StyleSizes { Orderof=3,SizeName="E" ,OurStyleID=1},
new StyleSizes { Orderof=4,SizeName="F" ,OurStyleID=1}
};
var orderList = list.Where(x=>x.OurStyleID==1).OrderBy(x => x.Orderof).Select(c => new { c.SizeName }).Distinct();