标签: linq

按多个字段对集合进行排序

我需要对一个集合进行排序.例如,我有

Austin 12/3/2012   
Sam 100 12/3/2012   
Sam 200 14/3/2012   
Bubly 300 12/3/2012   
Bubly 300 15/3/2012  
ram 100 13/3/2012 
Run Code Online (Sandbox Code Playgroud)

现在,如果排序顺序是Name,则datetime然后输出

Austin 12/3/2012    
Bubly 12/3/2012   
Bubly 15/3/2012   
ram 13/3/2012    
sam 12/3/2012    
sam 14/3/2012  
Run Code Online (Sandbox Code Playgroud)

如果他的排序顺序是Datetime,那么它应该是

12/3/2012 austin
12/3/2012 bubly
12/3/2012 sam
13/3/2012 ram
14/3/2012 sam
15/3/2012 bubly 
Run Code Online (Sandbox Code Playgroud)

因此对于其他项目.我该怎么做呢 ?如何使用列的顺序进行排序.

.net c# linq sorting

3
推荐指数
1
解决办法
6508
查看次数

已经有一个必须先关闭的开放DataReader

在我的映射逻辑层(Model to ViewModel)中,我尝试SelectListItem在编辑视图中填充一个HTML.DropDownListFor帮助器.

我尝试使用以下代码示例中的查询来检索品牌名称列表以填充SelectListItem,但触发了以下异常:

已经有一个与此命令关联的打开DataReader,必须先关闭它.

制图

public class MedicalProductMapper
{
    private MvcMedicalStoreDb _db; // DataContext class

    public MedicalProductMapper(MvcMedicalStoreDb db)
    {
        _db = db;
    }    
    public MedicalProductViewModel GetMedicalProductViewModel(MedicalProduct source)
    {
        MedicalProductViewModel viewModel = new MedicalProductViewModel();

        viewModel.ID = source.ID; 
        viewModel.Name = source.Name;
        viewModel.Price = source.Price;
        viewModel.BrandID = source.BrandID;

        // This following line produces the exception
        viewModel.BrandName = _db.Brands.Single(b => b.ID == source.BrandID).Name;

        var queryBrands = from b in _db.Brands
                          select b;

        viewModel.BrandSelectListItem = queryBrands as IEnumerable<SelectListItem>;

        return viewModel;
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# linq asp.net asp.net-mvc asp.net-mvc-4

3
推荐指数
1
解决办法
9600
查看次数

将前10个列表项移动到另一个项列表

我有List<Item> OldItems = new List<Item>,我想移动的前10项的OldItemsNewItems这是List<Item> NewItems= new List<Item>

有类似的东西吗?

NewItems.AddRange(OldItems.<First10Items>);
OldItems.Delete(<First10Items>);
Run Code Online (Sandbox Code Playgroud)

c# linq

3
推荐指数
1
解决办法
2386
查看次数

使用LINQ to Entity而不将所有行放入内存

我使用这种方法从EF获取每一页数据:

public IEnumerable<MyObj> GetByPage(int page, int perPage)
{
    return context.MyObj.Skip((page - 1) * perPage).Take(perPage);
}
Run Code Online (Sandbox Code Playgroud)

我想知道,这将获取的代码的所有行MyObj的内存和存储,然后将SkipTake或全部上面的代码将转换为SQL命令?

如果所有第一将存储在内存中,我如何使用LINQ到实体不使用的内存SkipTake

c# linq entity-framework

3
推荐指数
1
解决办法
2511
查看次数

将linq连接的左侧或右侧填充为相同的行数

我的目标是创建一个与右侧或左侧相同行数的列表,而不管左列或右列是否比另一列短.

考虑这两个查询:

var result1 = (from f in list2
               join b in list1 on f.index equals b.index into bf
               from x in bf.DefaultIfEmpty()
               select new { box = (x == null ? String.Empty : x.b), file = f.f });

var result2 = (from b in list1
              join f in list2 on b.index equals f.index into bf
              from x in bf.DefaultIfEmpty()
              select new { l1 = x.f, l2 = (x == null ? String.Empty : b.b) });
Run Code Online (Sandbox Code Playgroud)

一个在list1上测试null并填充一个空字符串,另一个在list2上测试null并填充一个空字符串.

我想找一个两者都可能发生的例子.顺序并不重要,只是左边的每个值或空字符串都有一个值或右边的空字符串.

c# linq sorting

3
推荐指数
1
解决办法
696
查看次数

如何将foreach循环转换为Linq查询?

具有以下结构

[[1,10],[2,20],[5,45],[10,34]]
Run Code Online (Sandbox Code Playgroud)

这个foreach循环找到匹配"planYear"的第一个元素.如果planYear = 5,则将选择第三个元素值"45".

List<object> gifts = gifts;
foreach (List<object> item in gifts)
{
  if (item[0] == planYear)
  {
    gift = Convert.ToDouble(item[1]);
    break;
  }
}
Run Code Online (Sandbox Code Playgroud)

什么是类似的Linq声明来实现同样的结果?

c# linq

3
推荐指数
1
解决办法
780
查看次数

寻找构建Linq动态/条件表达式的简单方法

给出表格如下:

表格1

  • ID
  • stringfield1
  • stringfield2
  • stringfield3
  • stringfield4

表2

  • ID
  • table1_id
  • stringfield1
  • datefield1

给定UI允许用户进行fency查询:

  • dropdwonlist1包含anytable1.stringfield1
  • dropdwonlist2包含anytable1.stringfield2
  • dropdwonlist3包含anytable1.stringfield3
  • dropdwonlist4包含anytable1.stringfield4
  • dropdwonlist5包含anytable2.stringfield1
  • dropdwonlist6与[ any,the,before,after,之间 ]
  • calendar1与table2.datefield1链接
  • calendar2与table2.datefield1链接

结果datagridview与everyfields.

我想建立条件查询,好像不是"任何"添加这个条件.

考虑到这一点,简单的LINQ查询不适用:

Table2
  .Where(x => x.stringfield1 == dropdwonlist1.SelectedValue)
  .Where(x => x.stringfield2 == dropdwonlist2.SelectedValue)
  .Where(x => x.stringfield3 == dropdwonlist3.SelectedValue)
(...)
Run Code Online (Sandbox Code Playgroud)

文档中有表达式树,但看起来太多了.

有最简单的方法来构建我的动态查询吗?

c# linq

3
推荐指数
1
解决办法
641
查看次数

Person是一个聚合根吗?

由于所有实体都标记了谁创建/修改了记录,我们是否可以将Person实体视为所有实体的聚合根?

也就是说,引用Person的所有实体都将成为Person的集合,例如

public class Person
{
    public virtual int PersonId { get; set; }
    public virtual string Lastname { get; set; }
    public virtual IList<OrderHeader> CreatedOrders { get; set; }
    public virtual IList<OrderHeader> ModifiedOrders { get; set; }

    // Other entities that have a reference on Person will be mapped as a collection under 
    // the Person entity
}


public class OrderHeader
{
    public virtual int OrderId { get; set; }        
    public virtual DateTime OrderDate { get; set; }
    public …
Run Code Online (Sandbox Code Playgroud)

c# linq nhibernate domain-driven-design aggregate

3
推荐指数
1
解决办法
482
查看次数

如何在SQL#中将lambda表达式作为参数传递

我是初学者使用lambda表达式.

我有一个经销商名单,foreach经销商我必须计算等级.

要求是将等级计算分成单独的方法.

所以我正在编写以下两种方法,但是我无法将参数传递给CalculateGrade()方法,

public IEnumerable<Dealers> GetDealerGrades(IEnumerable<Dealers> gradeData)
{
    return gradeData
        .GroupBy(row => new { row.Name })
        .Select(g => new Dealers
        {
            Name = g.Key.Name,
            TotalPoints = CalculateGrade(x => Convert.ToDouble(x.RecievedPoints),
                                         y => y.MaxPoints,
                                         z => Convert.ToDouble(z.Weightage)) 
        })
        .ToList();
}

private double CalculateGrade(double d1, int d2, double d3)
{
    return ( d1 / d2 ) 
        * d3 == 0.00 ? 1
        : d3;
}
Run Code Online (Sandbox Code Playgroud)

有人可以建议如何传递参数,或者如何传递lamda表达式并计算等级?

提前谢谢了...

c# linq

3
推荐指数
1
解决办法
5314
查看次数

如何递归迭代日期的数字和总和?

我想递归迭代一个日期的数字,求和它们,然后计算第一个总和中各个数字的另一个总和.

例如,DOB 1547年8月15日(19/08年8月15日)

1 + 5 + 0 + 8 + 1 + 9 + 4 + 7 = 35

3 + 5 = 8

答案:8

LINQ的.Aggregate()功能对我有很大帮助......

DOB.toString().Aggregate((a,b)=>(int)a+(int)b)
Run Code Online (Sandbox Code Playgroud)

...但结果35 :(

我想要一个递归LINQ调用,结果总是一位数.

c# linq

3
推荐指数
1
解决办法
142
查看次数