4

我将 Cases 与 Controls 匹配,基本上是 Case 列表中的记录,需要具有 string 中指定的匹配数m_ctrlno

到目前为止,我有两个列表,where 子句是正确的,但是我不确定如何使用SelectMany来获取匹配 1 个案例的 3 个控件。我决定使用该.Take()功能,但它似乎不起作用。当我在 var 查询上循环时,我没有得到与 3 个不同控件相同的情况。

这是代码:

List<CaseSelection> CurrentCaseList = new List<CaseSelection>();
foreach (CaseSelection CurrentCase in m_casesarraylist)
CurrentCaseList.Add(CurrentCase);

List<ControlSelection> CurrentControlList = new List<ControlSelection>();
foreach (ControlSelection CurrentControlRec in ControlList)
CurrentControlList.Add(CurrentControlRec);


var query = CurrentCaseList.SelectMany(
c => CurrentControlList.Where(o => o.pracid == c.pracid && o.sex == c.sex &&
CaseSelectionList.AgeIsInRange(c.yob, o.yob, m_years)),
(c, o) =>
new { o, c }).Take(m_ctrlno);
4

1 回答 1

2

在您的代码中,您定义 2 listCurrentCaseList,CurrentControlList但未定义CaseSelectionList

要获得与一种情况匹配的 3 个控件,请参见下面的代码:

SelectMany选择所有TotalDue小于 500.00 的订单的方法。

这是代码:

decimal totalDue = 500.00M;
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    ObjectSet<Contact> contacts = context.Contacts;
    ObjectSet<SalesOrderHeader> orders = context.SalesOrderHeaders;

    var query =
    contacts.SelectMany(
        contact => orders.Where(order =>
            (contact.ContactID == order.Contact.ContactID)
                && order.TotalDue < totalDue)
            .Select(order => new
            {
                ContactID = contact.ContactID,
                LastName = contact.LastName,
                FirstName = contact.FirstName,
                OrderID = order.SalesOrderID,
                Total = order.TotalDue
            }));

    foreach (var smallOrder in query)
    {
        Console.WriteLine("Contact ID: {0} Name: {1}, {2} Order ID: {3} Total Due: ${4} ",
            smallOrder.ContactID, smallOrder.LastName, smallOrder.FirstName,
            smallOrder.OrderID, smallOrder.Total);
    }
}
于 2013-04-19T09:50:37.160 回答