我有一个名为specifications
的表和一个列表字段,需要检查其值是否为null。这是列表:
List<string> fieldList = new List<string>() { name1, name2, name3 }; //name of the fields
我已经尝试了以下方法:
var checkForNull = TableInfo.Get("specifications").Fields.Where(i => fieldList.Find(x=>x==null)))
但是它不会选择null
值。
如何检查该值,同时如何将该字段名称保存到新列表中?
示例: 我的列表中有3个名称(name1,name2,name3)和数据库中的3个名称 是值(name1 = 30,name2 = null,name3 = null)
因此,名称2和名称3将添加到列表中。
所以我也尝试过:
TableInfo.Get("specifications").Fields.Where(i => fieldList .Contains(i.Name) && i.IsEmptyValue(i));
但这不起作用。
答案 0 :(得分:2)
如果要检查是否为空或为空,请使用IsNullOrEmpty()方法:
string name1, name2, name3;
name1 = "test";
name2 = null;
name3 = null;
List<string> fieldList = new List<string>() { name1, name2, name3 }; //name of the fields
var nullOrEmptyElementes = fieldList.Where(e => string.IsNullOrEmpty(e)).ToList();
否则,您可以只检查空值:
var nullOrEmptyElementes = fieldList.Where(e => e==null).ToList();
使用ToList()方法,您可以将IEnumerable <T>
转换为列表<T>
。
答案 1 :(得分:1)
这种方式:
class Program
{
static void Main(string[] args)
{
DataTable result = new DataTable();
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("SELECT name, value FROM specifications", connection))
{
using (SqlDataAdapter reader = new SqlDataAdapter(command))
{
reader.Fill(result);
}
}
}
List<string> foundNullSpecifications = result.Rows.OfType<DataRow>().Select(x => new Specification
{
Name = (string)x["name"],
Value = x["value"]
}).Where(x => x.Value == null).Select(x => x.Name).ToList();
}
}
public class Specification
{
public string Name { get; set; }
public object Value { get; set; }
}