簡體   English   中英

Linq To OR條件下的SQL幫助

[英]Linq To SQL help on OR condition

我有兩個表:

公司

注意: AliasList值由分號分隔

CompanyID | CompanyName | AliasList                                          
-------------------------------------------------------
1         | Wal-mart    | Walmart;Wal Mart;Samsclub    

EMPL

EmplID | EmployerName
-------------------------------------------------------
1      | Walmart    

我需要將EmployerName與CompanyName進行比較。 如果名稱匹配,則獲取一些值。 否則,將EmployerName與AliasList進行比較並獲取一些值。 我需要一些幫助,以LinqLinq To SQL這項工作。 我嘗試的解決方案:

var allAliasListData = getting all the AliasList values into a List by using split() function.

var result = from e in Empl
             from c in Company.Where(w => w.Company.Trim() == r.EmployerName.Trim() || allAliasListData.Contains(r.EmployerName.Trim())

首先,您需要為兩個表都生成List 然后,您可以使用Linq獲得結果。 在DotNetFiddle中創建了一個示例,下面的代碼示例。

碼:

using System;
using System.Linq;
using System.Collections.Generic;

public class Program
{
    class Company
    {
        public string CompanyID { get; set; }
        public string CompanyName { get; set; }
        public string AliasList { get; set; }
    }

    class Empl
    {
        public string EmplID { get; set; }
        public string EmployerName { get; set; }
    }

    public static void Main()
    {
        Case1();
        Case2();
        Case3();
    }

    static void Case1()
    {
        //CompanyName == EmployerName
        List<Empl> listEmpl = new List<Empl>() { new Empl() { EmplID = "1", EmployerName = "Walmart" } };
        List<Company> listCompany = new List<Company>() { new Company() { CompanyID = "1", CompanyName = "Walmart", AliasList = "Wal-mart;Wal Mart;Samsclub" } };

        var result = from e in listEmpl
            from c in listCompany.Where(w => w.CompanyName.Trim() == e.EmployerName.Trim() || w.AliasList.Split(';').Contains(e.EmployerName.Trim()))
            select new { c.CompanyName, e.EmployerName };

        if(result.FirstOrDefault() != null)
        {
            Console.WriteLine(result.FirstOrDefault().CompanyName);
        }
        else
        {
            Console.WriteLine("Result is empty!");
        }
    }

    static void Case2()
    {
        //AliasList Contain EmployerName
        List<Empl> listEmpl = new List<Empl>() { new Empl() { EmplID = "1", EmployerName = "Wal-mart" } };
        List<Company> listCompany = new List<Company>() { new Company() { CompanyID = "1", CompanyName = "Walmart", AliasList = "Wal-mart;Wal Mart;Samsclub" } };

        var result = from e in listEmpl
            from c in listCompany.Where(w => w.CompanyName.Trim() == e.EmployerName.Trim() || w.AliasList.Split(';').Contains(e.EmployerName.Trim()))
            select new { c.CompanyName, e.EmployerName };

        if(result.FirstOrDefault() != null)
        {
            Console.WriteLine(result.FirstOrDefault().CompanyName);
        }
        else
        {
            Console.WriteLine("Result is empty!");
        }
    }

    static void Case3()
    {
        //Not match any condition
        List<Empl> listEmpl = new List<Empl>() { new Empl() { EmplID = "1", EmployerName = "Wal - mart" } };
        List<Company> listCompany = new List<Company>() { new Company() { CompanyID = "1", CompanyName = "Walmart", AliasList = "Wal-mart;Wal Mart;Samsclub" } };

        var result = from e in listEmpl
            from c in listCompany.Where(w => w.CompanyName.Trim() == e.EmployerName.Trim() || w.AliasList.Split(';').Contains(e.EmployerName.Trim()))
            select new { c.CompanyName, e.EmployerName };

        if(result.FirstOrDefault() != null)
        {
            Console.WriteLine(result.FirstOrDefault().CompanyName);
        }
        else
        {
            Console.WriteLine("Result is empty!");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM