using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Dynamic.Core;
namespace ConsoleApp1
{
//主人类
internal class Person
{
public string Name { get; set; }
}
//宠物类
internal class Pet
{
public string PetName { get; set; }
public string OwnerName { get; set; }
}
internal class Program
{
private static void Main(string[] args)
{
var people = new List<Person>
{
new Person{Name="yangis"},
new Person{Name="moll"},
new Person{Name="daixu"},
};
var pets = new List<Pet>
{
new Pet{PetName="chicken",OwnerName="yangis"},
new Pet{PetName="cow",OwnerName="moll"},
new Pet{PetName="bull",OwnerName="daixu"},
new Pet{PetName="pig",OwnerName="daixu"},
};
//查询条件
var personName = "daixu";
var petName = "pig";
StringBuilder builder = new StringBuilder();
builder.Append("1 = 1");
//参数
var sqlParams = new List<object>();
if (!string.IsNullOrEmpty(personName))
{
builder.Append($" and Name == @{sqlParams.Count}");
sqlParams.Add(personName);
}
if (!string.IsNullOrEmpty(petName))
{
builder.Append($" and PetName == @{sqlParams.Count}");
sqlParams.Add(petName);
}
var query = (from person in people
join pet in pets on person.Name equals pet.OwnerName
select new { person.Name, pet.PetName }).AsQueryable().Where(builder.ToString(), sqlParams.ToArray());
foreach (var item in query)
{
Console.WriteLine($"{item.Name} - {item.PetName}");
}
Console.ReadKey();
}
}
}
我这样写是不是相当于把所有记录查出来,再过滤了?
如果是,请问有什么好的方法吗?
(PS:我不太xi'guan用表达式树)