小编Hen*_*nda的帖子

(De)使用一个类序列化不同的根元素名称

我有几个具有不同根元素的XML文件,但是相同类型的子元素,我希望能够创建一个单独的类来保存不同的根元素,而另一个类来保存每个子元素.以下是XML文件外观的两个示例.

档案1:

<?xml version="1.0" encoding="utf-8" ?>
<Sandra>
  <Address>
    <Street></Street>
    <Number></Number>
  </Address>
</Sandra>
Run Code Online (Sandbox Code Playgroud)

文件2:

<?xml version="1.0" encoding="utf-8" ?>
<John>
  <Address>
    <Street></Street>
    <Number></Number>
  </Address>
</John>
Run Code Online (Sandbox Code Playgroud)

我希望能够使用2个类来序列化和反序列化,例如:

[Serializable]
[XmlRoot]
public class Person
{
    [XmlElement("Address")]
    public List<Address> Adresses { get; set; }
}

[Serializable]
public class Address
{
    public string Street { get; set; }

    public string Number { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下方法阅读它们:

    var ser = new XmlSerializer(typeof(Person));
    var reader = XmlReader.Create("person1.xml");
    var person = (Person)ser.Deserialize(reader);
Run Code Online (Sandbox Code Playgroud)

但我得到了"There is an error in XML …

c# xml-serialization

9
推荐指数
1
解决办法
8495
查看次数

如何在遵守一些约束的同时生成数字序列?

在遵守一系列约束的同时,我需要生成从0到999999(不重复)的所有可能的数字(整数)。

为了更好地理解要求,请想象每个数字由2位数字的前缀和4位数字的后缀组成。就像000000被读为00-0000和999999被读为99-9999。现在到规则:

  • 前缀必须是随机顺序
  • 后缀必须按随机顺序排列,同时确保序列中的每个10k数字都具有从0000到9999的所有数字。
  • 给定种子,必须能够以相同的顺序再次生成数字。
  • 并不是真正的要求,但是如果使用Linq完成,那就太好了。

到目前为止,我已经写了一些满足所有要求的代码,但第一个除外:

var seed = 102111;
var rnd = new Random(seed);
var prefix = Enumerable.Range(0, 100).OrderBy(p => rnd.Next());
var suffix = Enumerable.Range(0, 10000).OrderBy(s => rnd.Next());
var result = from p in prefix
                from s in suffix
                select p.ToString("d2") + s.ToString("d4");

foreach(var entry in result)
{
    Console.WriteLine(entry);
}
Run Code Online (Sandbox Code Playgroud)

使用这个我可以使用相同的种子来重现序列,前10000个数字的所有数字都从0000到9999,第二个10k等等,但是前缀并不是真正随机的,因为每个10k组都具有相同的前缀。

我还考虑过创建一个带有数字及其组的类(100个组,每个组有1万个数字),以使洗牌更容易,但我认为这是更好,更简单的方法。

c# linq algorithm combinatorics

7
推荐指数
2
解决办法
318
查看次数

如何根据 Net Core 3.1 中选定的构建配置合并 appsettings.json?

我在 Net Core 3.1 中有一个工作服务,它从appsettings.json文件中读取生产设置,并在开发过程中(使用“调试”构建配置)按预期appsettings.json用 覆盖设置appsettings.Development.json

我为我们的 QA 环境创建了构建配置和发布配置,我希望在构建/发布时appsettings.QA.json合并该文件。appsettings.json但发布项目仅复制appsettings.json生产设置,而不会与文件中的设置合并aspsetting.QA.json

我怎样才能实现这个目标?我不想复制appsettings.QA.json到 QA 环境并设置DOTNET_ENVIRONMENTQA. 在这种情况下我不想依赖环境变量。

c# configuration appsettings .net-core-3.1

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

使用Linq to Entities进行分组和多次排序

我有这两个实体:

public class Course
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public virtual ICollection<Class> Classes { get; set; }
}

public class Class
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; } ]
    public Course Course { get; …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-entities ef-code-first

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

在表中插入新行时,如何使用 PostgreSQL 中的触发器创建新模式?

我有一个保存客户的表,每个国家/地区只有一个客户,对于该表中的每一行,我必须创建一个新架构并复制一些表。像这样:

Clients table's columns: 

client      country
----------  -----------
john doe    US
jane doe    UK
Run Code Online (Sandbox Code Playgroud)

架构:

clients_US
clients_UK
Run Code Online (Sandbox Code Playgroud)

我需要创建一个触发器,以便每次将新客户端添加到客户端表时自动创建这些架构,并使用国家/地区列数据作为架构名称的一部分。

在完美的世界中,这是可行的,但显然不行:

CREATE OR REPLACE FUNCTION gcpmanager.create_sle_schema() 
RETURNS trigger LANGUAGE plpgsql
AS
    'begin 
    CREATE SCHEMA "clients_" + new.country
    AUTHORIZATION postgres;
        return new;
    end;';
Run Code Online (Sandbox Code Playgroud)

postgresql triggers

5
推荐指数
1
解决办法
2191
查看次数

为什么DELETE TOP(X)语句不删除与先前SELECT TOP(X)返回的记录相同的记录?

如标题所示,我一直在运行此命令从表中删除一些记录,但是我注意到,如果我运行查询以选择TOP(X)之前的记录,它并没有删除列出的相同记录。

DELETE命令是否应该遵循相同的默认顺序SELECT?如果没有,为什么?

我不知道这是否重要,但这是我正在运行的delete命令:

DELETE TOP (100000) t
FROM Ticket AS t
    LEFT JOIN Series s on t.SeriesId = s.id
    LEFT JOIN Payment p on t.id = p.TicketId
WHERE s.EndDate <= DATEADD(MONTH, -1, GETDATE()) AND t.ExportDate is null AND p.TicketId is null
Run Code Online (Sandbox Code Playgroud)

对于选择,只需将第一行替换为 SELECT TOP(100000) t.*

sql-server

4
推荐指数
1
解决办法
64
查看次数

Generic Linq to Entities过滤器方法,它接受要过滤的过滤条件和属性

我已经在SO中查看了许多通用的linq过滤问题及其答案,但它们都没有满足我的需求,所以我想我应该创建一个问题.

我已经创建了许多我称之为"过滤器提供程序"的类,一个用于我的模型中的每个实体类,以便为我的应用程序提供简单的搜索.我不想进入像Lucene.Net这样的更高级的解决方案,因为具有匹配分数的基本过滤就足够了.

在这些提供者类的每个提供者类中,有多种方法将接收过滤术语和查询特定属性,并根据属性的相关性返回每个匹配的分数.大多数方法会一次过滤多个属性,但不是全部.

以下是其中两种方法:

private IQueryable<Retailer> MatchHighRelevanceFields(string searchTerm, IQueryable<Retailer> retailers)
{
    var results = retailers.Where(r =>
        (r.CompanyName != null && r.CompanyName.ToUpper().Contains(searchTerm))
        || (r.TradingName != null && r.TradingName.ToUpper().Contains(searchTerm))
    );

    return results;
}

private IQueryable<Retailer> MatchMediumRelevanceFields(string searchTerm, IQueryable<Retailer> retailers)
{
    var results = retailers.Where(r =>
        (r.Address.Street != null && r.Address.Street.ToUpper().Contains(searchTerm))
        || (r.Address.Complement != null && r.Address.Complement.ToUpper().Contains(searchTerm))
    );

    return results;
}
Run Code Online (Sandbox Code Playgroud)

这些方法在每个提供程序类中都被复制,我希望我可以将它们替换为接收要包含在查询中的属性的单个方法.

就像是:

public static IQueryable<T> Match<T>(string searchTerm, IQueryable<T> data, Expression<Func<T, string>> filterProperties)
{
    var results = **build the query for each property …
Run Code Online (Sandbox Code Playgroud)

c# generics linq-to-entities entity-framework

2
推荐指数
1
解决办法
2942
查看次数

EF 4.1 Code-first上的接口和多重约束违规

我正在尝试与供应商,经销商和零售商定义供应链.此实体由Contract类绑定,该类还定义ProductLine及其将使用的产品.对于给定的ProductLine,供应商(该ProductLine的唯一所有者)与经销商之间将签订合同,然后是该经销商与零售商之间的另一份合同.

问题是两个经销商之间也有合同,所以我尝试创建两个接口(ISeller和IBuyer).供应商实施ISeller,零售商实施IBuyer和Dealer实现两个接口:

public class Supplier : ISeller
{
    public int Id { get; set; }
    public virtual ICollection<Contract> Contracts { get; set; }
}

public class Dealer : ISeller, IBuyer
{
    public int Id { get; set; }
    public virtual ICollection<Contract> Contracts { get; set; }
}

public class Retailer : IBuyer
{
    public int Id { get; set; }
    public virtual ICollection<Contract> Contracts { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

合同然后将ISeller绑定到IBuyer,如下所示:

public class Contract
{
    public int Id { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-code-first

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