我有几个具有不同根元素的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 …
在遵守一系列约束的同时,我需要生成从0到999999(不重复)的所有可能的数字(整数)。
为了更好地理解要求,请想象每个数字由2位数字的前缀和4位数字的后缀组成。就像000000被读为00-0000和999999被读为99-9999。现在到规则:
到目前为止,我已经写了一些满足所有要求的代码,但第一个除外:
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万个数字),以使洗牌更容易,但我认为这是更好,更简单的方法。
我在 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_ENVIRONMENT为QA. 在这种情况下我不想依赖环境变量。
我有这两个实体:
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) 我有一个保存客户的表,每个国家/地区只有一个客户,对于该表中的每一行,我必须创建一个新架构并复制一些表。像这样:
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) 如标题所示,我一直在运行此命令从表中删除一些记录,但是我注意到,如果我运行查询以选择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.*
我已经在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) 我正在尝试与供应商,经销商和零售商定义供应链.此实体由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)