我一直试图找出如何在sql中编写此查询.
我需要的是找到有50个或更多订单的产品名(在产品表中)(在订单表中).
只有一个orderid一次与一个productname匹配,因此当我尝试计算orderid时,它会计算所有这些.
我可以获得不同的产品名称,但是一旦我添加了orderid,它就会回到拥有多个产品名称.
我还需要计算订购这些产品的客户数量(在订单表中).
我尽快得到一些认真的帮助!如果有人能帮助我弄清楚如何弄明白这将是非常棒的!
Table: Products
`productname` in the form of a text like 'GrannySmith'
Table: Orders
`orderid` in the form of '10222'..etc
`custid` in the form of something like 'SMITH'
Run Code Online (Sandbox Code Playgroud) 我们假设我有一个字符串集合,如下所示:
IList<string> myList = new List<string>(){"one", "two", "three"};
Run Code Online (Sandbox Code Playgroud)
使用myList.Aggregate我希望最终得到"'one','two','three'"(包括单引号)
有人只有使用聚合函数才能做到这一点吗?我正在思考一些问题
myList.Aggregate((increment, seed) => string.Concat(increment, ", ", seed));
Run Code Online (Sandbox Code Playgroud)
但这只是解决方案的一半.
不幸的是,SQL Server无法处理超过2100参数的参数列表.我有几个查询,当以批处理模式运行时超过此限制.为了仍然得到我想要的结果并快速循环数据集,我决定Skip(i).Take(2000)在for循环中使用.
我没有准备好的是两者Union并且Concat要求IEnumerable不仅仅是实例化工作.当然它是空的,但我必须遗漏一些关于它们使用的基本信息.无论如何,为了解决这个问题,我最终使用了List和AddRange.我正在使用NHibernate,但不要认为这些因素成为原因Union并且Concat不起作用.
var machineResults = new List<Machine>();
for (int i = 0; i < machines.Count(); i += 2000)
{
// I would have expected Union or Concat to work here
machineResults.AddRange(GetSession().CreateQuery(
@"select distinct m
from Machine m
where m in (:MachinesList)") // there's more criteria than this
.SetParameterList("MachinesList",
machines.Skip(i).Take(2000).ToList())
.List<Machine>());
}
return machineResults;
Run Code Online (Sandbox Code Playgroud)
所以我错过什么关于Union和Concat?他们为什么不在上述声明中工作?我理解为什么AddRange可以工作,但是如果我关心我的结果的唯一性并希望使用该Union怎么办?
如何正确返回"CarTypes"对象列表(来自第二种方法),其中传入的TyreID不是CarType类的主键 - 例如,我想返回所有CarTypes的列表,TyreID为5:
// GET api/CarTypes
public IEnumerable<CarTypes> GetCarTypes()
{
return db.CarTypes.AsEnumerable(); //This works fineCar
}
// GET api/CarTypes/5
public IEnumerable<CarTypes> GetCarTypes(long id)
{
CarTypes cartypes = db.CarTypes.Select(t => t.TyreID == id).AsEnumerable();
if (roomtypes == null)
{
throw new HttpResponseException(Request
.CreateResponse(HttpStatusCode.NotFound));
}
return cartypes;
}
Run Code Online (Sandbox Code Playgroud)
它目前显示错误:
无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'MvcApplication4.Models.CarTypes'.存在显式转换(您是否错过了演员?)
如果我在查询中使用Select/SelectMany/Where,这有关系吗?
我仍在尝试分析函数的分离以及它如何应用于类创建和命名空间包含.我有一个自定义类SoftwareComponent,当呈现给用户时,通常会显示为ListItem.创建ToListItem方法是个好主意吗?我担心,因为我现在已经在类中放置了一个依赖项,需要包含System.Web.UI.WebControls命名空间.
public ListItem ToListItem()
{
ListItem li = new ListItem();
li.Text = ComponentName + " (+" + ComponentCost + ")";
li.Selected = Selected;
return li;
}
Run Code Online (Sandbox Code Playgroud)
我的另一个倾向是根据类本身之外的属性从SoftwareComponent创建一个ListItem.请提供关于哪种方法更合适/更好的任何想法.
我正在使用List<T>包含父对象和子对象的a.在此列表中,子对象知道其相关的父对象,反之亦然.使用此列表,我正在尝试实现一个业务规则,当父级属于某种类型时,最多可以从列表中删除4个子对象.换句话说,如果此类型的父级有20个孩子,则应从列表中删除其中的4个孩子.
我在这里概述的代码将RemoveAll符合条件的子对象.这是预期的,但我想做的是限制RemoveAll只删除4个孩子.有没有办法做到这一点,RemoveAll或者我应该使用另一种方法吗?
myList.RemoveaAll(item =>
item.Child && "Foo".Equals(item.Parent.SpecialType));
Run Code Online (Sandbox Code Playgroud) 我们有什么方法可以使用AD服务器中的c#来获取X509公共证书来加密电子邮件.现在我正在使用本地商店提取证书和加密邮件.
static public X509Certificate2 GetRecipientCertPublic(string recipientName)
{
X509Store storeAddressBook =
new X509Store(StoreName.AddressBook, StoreLocation.CurrentUser);
storeAddressBook.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certColl =
storeAddressBook.Certificates.Find(X509FindType.FindBySubjectName, recipientName, false);
storeAddressBook.Close();
if (certColl.Count != 0)
{
return certColl[0];
}
else
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所看到的Outlook中的行为不同.即使Recipeint的公共证书不在本地机器证书管理器中.它能够从组织的中心服务器或广告服务器(我不是很确定)中获取公共证书并发送加密邮件.
c# ×5
lambda ×2
aggregate ×1
architecture ×1
asp.net ×1
asp.net-mvc ×1
certificate ×1
class-design ×1
encryption ×1
linq ×1
removeall ×1
sql ×1