小编Amy*_*y B的帖子

如何使用Linq从对象列表中获取唯一的属性列表?

我正在尝试使用Linq返回一个id列表,给出id为属性的对象列表.我希望能够在不循环遍历每个对象并拉出我找到的唯一ID的情况下执行此操作.

我有一个MyClass类型的对象列表,这个类的一个属性是一个ID.

public class MyClass
{
  public int ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是写一个Linq查询来返回我的那些ID列表

IList<MyClass>如果它返回一个IEnumerable<int>id ,我该怎么做呢?

我确信必须能够使用Linq在一行或两行中完成它,而不是循环遍历MyClass列表中的每个项目并将唯一值添加到列表中.

任何帮助创建一个优雅的解决方案将非常感谢!

linq properties class list c#-3.0

164
推荐指数
3
解决办法
12万
查看次数

如何从.net中的IEnumerable <T>获取第一个元素?

我经常想要抓住IEnumerable<T>.net中的第一个元素,我还没有找到一个很好的方法来做到这一点.我提出的最好的是:

foreach(Elem e in enumerable) {
  // do something with e
  break;
}
Run Code Online (Sandbox Code Playgroud)

呸!那么,有一个很好的方法来做到这一点?

.net c#

144
推荐指数
4
解决办法
18万
查看次数

调整小数精度,.net

C#中的这些行

decimal a = 2m;
decimal b = 2.0m;
decimal c = 2.00000000m;
decimal d = 2.000000000000000000000000000m;

Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);
Run Code Online (Sandbox Code Playgroud)

生成此输出:

2
2.0
2.00000000
2.000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

所以我可以看到从文字中创建一个十进制变量允许我控制精度.

  • 我可以在不使用文字的情况下调整十进制变量的精度吗?
  • 我如何从一个?创建b?如何从c创建b?

.net precision decimal

63
推荐指数
5
解决办法
6万
查看次数

LINQ本身是否支持将一个集合拆分为两个?

给定项目集合,如何根据谓词将集合拆分为2个子集合?

您可以进行2次搜索,但运行时间为2*N(虽然仍为O(n),但需要两倍的时间,显然不是首选)

IEnumerable<int> even = nums.Where(i => IsEven(i));
IEnumerable<int> odd = nums.Where(i => !IsEven(i));
Run Code Online (Sandbox Code Playgroud)

你可以自己做一个线性传递(在这里重构为扩展方法),但这意味着你必须全部拖动这些代码,而更多的自定义代码使得事情的可维护性降低.

public static void SplitOnPred<T>(
        this IEnumerable<T> collection,
        Func<T, bool> pred,
        out IEnumerable<T> trueSet,
        out IEnumerable<T> falseSet
    ) {
        List<T> trueSetList = new List<T>();
        List<T> falseSetList = new List<T>();
        foreach( T item in collection ) {
            if( pred( item ) ) {
                trueSetList.Add( item );
            } else {
                falseSetList.Add( item );
            }
        }
        trueSet = trueSetList;
        falseSet = falseSetList;
}
Run Code Online (Sandbox Code Playgroud)

问题: LINQ是否有任何原生支持在1个线性传递中拆分集合?

c# linq

29
推荐指数
3
解决办法
4635
查看次数

O/R Designer验证失败 - 在清洁期间?

------ Clean started: Project: DataService, Configuration: Debug Any CPU ------
O/R Designer validation failed for file: a.dbml
O/R Designer validation failed for file: b.dbml
O/R Designer validation failed for file: c.dbml
O/R Designer validation failed for file: d.dbml
O/R Designer validation failed for file: e.dbml
O/R Designer validation failed for file: f.dbml
Error: The operation could not be completed. Unspecified error 
Run Code Online (Sandbox Code Playgroud)

此错误是间歇性的.有时清洁很好,有时会发生这种情况.

我正在运行VS2008版本9.0.30729.1 SP - 64位.

有什么方法可以禁用O/R设计师的验证或以其他方式阻止它发生?

designer linq-to-sql

13
推荐指数
2
解决办法
2687
查看次数

获取嵌套实体的计数

我正试图在LINQ中查明特定州的员工数量.

我有这样的事情:

States
     |
     Cities
          |
          Posts
              |
              Employees
Run Code Online (Sandbox Code Playgroud)

如何Employees通过State手头选择计数?

我的实体是:

public class Province : EntityBase
{
    public String ProvinceName { get; set; }
    public virtual IList<City> Cities { get; set; }
}

public class City : EntityBase
{
    public String CityName { get; set; }

    public virtual Province Province { get; set; }
    public virtual IList<Post> ElectricPosts { get; set; }
}

public class Post : EntityBase
{
    public String PostName { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework

11
推荐指数
2
解决办法
1824
查看次数

编译的查询和"参数不能是序列"

我认为编译的查询将执行与DataContext相同的查询转换.然而,当我尝试使用带有.Contains方法调用的查询时,我遇到了运行时错误.我哪里出错了?

//private member which holds a compiled query.
Func<DataAccess.DataClasses1DataContext, List<int>, List<DataAccess.TestRecord>>
  compiledFiftyRecordQuery = System.Data.Linq.CompiledQuery.Compile
  <DataAccess.DataClasses1DataContext, List<int>, List<DataAccess.TestRecord>>
  ((dc, ids) => dc.TestRecords.Where(tr => ids.Contains(tr.ID)).ToList());

//this method calls the compiled query.
public void FiftyRecordCompiledQueryByID()
{
  List<int> IDs = GetRandomInts(50);

  //System.NotSupportedException
  //{"Parameters cannot be sequences."}

  List<DataAccess.TestRecord> results = compiledFiftyRecordQuery
    (myContext, IDs);         
}
Run Code Online (Sandbox Code Playgroud)

contains linq.compiledquery linq-to-sql

7
推荐指数
1
解决办法
4388
查看次数

比萨,线程,等待,通知.这是什么意思?

我有两种方法(在C#中):

List<Pizza> CookPizza(List<Order>);
List<HappyCustomers> DeliverPizza(List<Pizza>);
Run Code Online (Sandbox Code Playgroud)

这些操作没有共同的对象(除了从一个传递到另一个的比萨),并且是线程安全的.它们每个都需要几秒钟才能执行,它们每个都使用不同的资源(烤箱与汽车).因此,我想同时运行它们.

如何使用这些约束组织线程:

  • 我知道一开始的所有订单(比方说,我有10万个订单).一个订单可以包含多个比萨饼,我不知道在比萨饼煮熟之前,任何订单中都有多少比萨饼.(我知道很奇怪).一般来说,订单有1个披萨,但最多可以有10个.

  • 活跃的比萨饼的数量一般不应超过100.这包括新鲜煮熟的比萨饼和交付的比萨饼.这是一个软限制,所以我可以超过一些(例如,当一个大订单煮熟时).硬限制可能接近500.

  • 当他们获得大量工作时,这两项操作都会更有效率.通常,CookPizza在给出至少20个订单时效率最高.如果给予至少50个比萨饼,提供比萨饼是最有效的.也就是说,如果我给这些方法的项目少于那些数量,我会看到性能下降.如果剩下这些,那么使用更少的物品就可以了.

我正在解决的主要问题是这些方法可能需要相互等待.

  • DeliverPizza可能需要等待CookPizza完成50.
  • CookPizza可能需要等待DeliverPizza将活跃的Pizzas数量减少到100.

c# multithreading

7
推荐指数
1
解决办法
527
查看次数

调试后项目引用被删除

我们最近已升级到VS2010(10.0.40219.1 SP1Rel)和ILOG规则.net 7.1.1.4(x64).现在可以发生以下情况:

  1. 打开解决方案.
  2. 调试项目
  3. 停止调试.
  4. 关闭文件(到目前为止:app.Config和Program.cs)
  5. 观看"重构规则"通知窗口出现.
  6. 惊恐万分,因为每个rulep文件的第一个项目引用都被删除了.

这种情况发生在大型解决方案中(大约60个csproj,约15个规则).这种情况发生在较小的解决方案中(6个csproj,1个规则).

我们已经开始采取极端开发措施来避免引用丢失(在调试时卸载所有规则,并在调试后关闭/重新打开VS2010).

我们的项目或软件设置中有什么东西可以改变以阻止项目引用下降吗?


更新:虽然使用调试器是一种可靠的方法来解决"重构规则/引用丢弃"问题,但偶尔也只是通过关闭文件而不使用调试器.


我已经获得了第一笔赏金,如果有人想出一个可以接受的答案,我愿意设立第二笔赏金.


解决方法:我们有三个解决方案文件

  1. 一个解决方案文件,其中包含构建服务器的所有内容.
  2. 一个只包含rulep及其依赖项的解决方案文件.Devs构建了一次以获得规则的.dll.
  3. 不包含rulep项目的解决方案文件.需要rulep的dll的项目具有预构建事件,该事件将dll复制到其文件夹中以及对该位置的程序集引用.允许调试和发布版本都需要一点点摆弄.

开发人员可以安全地调试第三个解决方案,该解决方案没有用于VS的规则文件.

project-reference visual-studio-2010 ilog

7
推荐指数
1
解决办法
478
查看次数

LinqToSql .Contains和nvarchar vs varchar参数 - >索引转换计划

我有一个映射在datacontext中的表.这是感兴趣的列的属性和属性:

[Column(Storage="_CustomerNumber", DbType="VarChar(25)")]
public string CustomerNumber
{
Run Code Online (Sandbox Code Playgroud)

实际上,该列是varchar(25)并具有索引.

我有一些简单的代码:

DataClasses1DataContext myDC = new DataClasses1DataContext();
myDC.Log = Console.Out;

List<string> myList = new List<string>() { "111", "222", "333" };
myDC.Customers
    .Where(c => myList.Contains(c.CustomerNumber))
    .ToList();
Run Code Online (Sandbox Code Playgroud)

哪个生成此SQL文本:

SELECT [t0].[CustomerNumber], [t0].[CustomerName]
FROM [dbo].[Customers] AS [t0]
WHERE [t0].[CustomerNumber] IN (@p0, @p1, @p2)
-- @p0: Input NVarChar (Size = 3; Prec = 0; Scale = 0) [111]
-- @p1: Input NVarChar (Size = 3; Prec = 0; Scale = 0) [222]
-- @p2: Input NVarChar (Size = …
Run Code Online (Sandbox Code Playgroud)

orm linq-to-sql

6
推荐指数
1
解决办法
2813
查看次数